Ý bạn là sao? Có phải như thế này không?Mình muốn hỏi thuật toán tính tống các chữ số trong một số?
Xin mọi người giúp đỡ.
B1 = SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))
Thuật toán là: tách từng ký tự một trong chuỗi số đó ra (dùng hàm MID), chuyển nó thành số (vì hàm MID trả về giá trị là Text) và cho vào một mảng, sau đó SUM tất cả các phần tử trong mảng đó lại! dùng SUM (phải ctrl+Shift+Enter) hoặc SUMPRODUCTĐối với một bài toán thông thường. Thuật toán chung để giải quyết bài toán này là thế nào?
Bạn có thể cho ý kiến không?
Ý bạn là sao? Có phải như thế này không?
Giả sử:
Ô [A1] = 12345678
Ô [B1] cần tính = 1+2+3+4+5+6+7+8 = 36
Nếu đúng vậy thì dùng công thức sau:
PHP:B1 = SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))
INDIRECT("1:"&LEN(A1))
là sao hả anh?Formula is too long
Dùng VBA cũng thế thôi!Điều đó thì tất nhiên. Mình hỏi ví dụ dùng vba. Thì phải làm thế nào?
Bạn có thể giúp mình không?
Indirect("1:"& LEN(A1)) phải đặt trong hàm ROW nó mới có nghĩa.Anh giải thích giúp em công thức trên với. Em quét đoạnrồi nhấn F9 nó báo là Formula is too long là sao hả anh?Mã:INDIRECT("1:"&LEN(A1))
Vì ta không biết trước độ dài của chuỗi số là bao nhiêu nên cái n đó thay bằng LEN(chuỗi số) và ta không thể viết là:Row(1:1) = {1}
Row(1:2) = {1,2}
Row(1:3) = {1,2,3}
Row(1:n) = {1,2,3,....,n}
Mà phải dùng Indirect để chuyển text thành giá trị tham chiếuROW(1:Len(A1))
Indirect("1:"&LEN(A1)) =1:n
Ý bạn là sao? Có phải như thế này không?
Giả sử:
Ô [A1] = 12345678
Ô [B1] cần tính = 1+2+3+4+5+6+7+8 = 36
Nếu đúng vậy thì dùng công thức sau:
PHP:B1 = SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))
Đúng vậy, bản chất của SUMPRODUCT là một hàm mảng rồi, cho nên khi dùng nó ta không cần ấn Ctrl+Shift+Enter. Còn hàm SUM thì không phải hàm mảng nên ta phải dùng tổ hợp phím trên!Mình muốn hỏi 1 chút, ở đây bạn dùng SUMPRODUCT có phải là với mục đích chuyển cả hàm ROW đó thành 1 mảng {1,2,3,4,5,6,7,8} hay không, mình thử với SUM cũng cho ra cùng kết quả nhưng phải kết thúc với Ctrl Shift Enter, còn công thức của bạn thì chỉ cần nhấn Enter thôi.
Cho mình xin link bài viết về sự khác nhau khi nhấn tổ hợp phím ctrl+shift+enter và Enter với.
Vì thời gian không có nhìu và không bít cách searh bài như thế nào nên bạn giúp mình với.
Thanks.
Đúng vậy, bản chất của SUMPRODUCT là một hàm mảng rồi, cho nên khi dùng nó ta không cần ấn Ctrl+Shift+Enter. Còn hàm SUM thì không phải hàm mảng nên ta phải dùng tổ hợp phím trên!
Dùng công thức được không?Các bạn giúp mình tính tổng các số trong một số sao cho đến kết quả cuối cùng còn một chữ số.
Ví dụ như : cho số 214598
thì sẽ cộng như sau : 2+1+4+5+9+8=29
tiếp 2+9=11
tiếp 1+1=2
như vậy mới kết thúc.
dùng VBA nhé
Cám ơn các bạn
Nếu em nhập vào A1 số 0 thì... tèoDùng công thức được không?
Giả sừ bạn gõ số gì đó tại A1 thì yêu cầu của bạn có thể thực hiện bằng công thức thế này tại B1:
=MOD(A1-1,9)+1
Chắc vậy! Và đương nhiên chỉ tính số nguyên thôi nha
Thử xem... Ẹc... Ẹc...
Thì IF cái đi ---> Thuật toán vẫn vậy màNếu em nhập vào A1 số 0 thì... tèo![]()
Ý bạn là sao? Có phải như thế này không?
Giả sử:
Ô [A1] = 12345678
Ô [B1] cần tính = 1+2+3+4+5+6+7+8 = 36
Nếu đúng vậy thì dùng công thức sau:
PHP:B1 = SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))
Mình muốn hỏi 1 chút, ở đây bạn dùng SUMPRODUCT có phải là với mục đích chuyển cả hàm ROW đó thành 1 mảng {1,2,3,4,5,6,7,8} hay không, mình thử với SUM cũng cho ra cùng kết quả nhưng phải kết thúc với Ctrl Shift Enter, còn công thức của bạn thì chỉ cần nhấn Enter thôi.
Dùng công thức được không?
Giả sừ bạn gõ số gì đó tại A1 thì yêu cầu của bạn có thể thực hiện bằng công thức thế này tại B1:
=MOD(A1-1,9)+1
Chắc vậy! Và đương nhiên chỉ tính số nguyên thôi nha
Thử xem... Ẹc... Ẹc...
Em muốn hỏi chút ạ:
Ví dụ dãy số của e trong ô A1 hiển thị thế này: 1-2-5-1-3-4-2-1
Bây giờ e muốn cộng kiểu tịnh tiến dãy số trên thì làm thế nào ạ?
Cộng tịnh tiến bằng tay thì dãy số trên sẽ ra là 1-3-8-9-12-16-18-19
Em cảm ơn nhiều ạ!
Bài đã được tự động gộp:
Em muốn hỏi chút ạ:
Ví dụ dãy số của e trong ô A1 hiển thị thế này: 1-2-5-1-3-4-2-1
Bây giờ e muốn cộng kiểu tịnh tiến dãy số trên thì làm thế nào ạ?
Cộng tịnh tiến bằng tay thì dãy số trên sẽ ra là 1-3-8-9-12-16-18-19
Em cảm ơn nhiều ạ!
Bài đã được tự động gộp:
Em muốn hỏi chút ạ:
Ví dụ dãy số của e trong ô A1 hiển thị thế này: 1-2-5-1-3-4-2-1
Bây giờ e muốn cộng kiểu tịnh tiến dãy số trên thì làm thế nào ạ?
Cộng tịnh tiến bằng tay thì dãy số trên sẽ ra là 1-3-8-9-12-16-18-19
Em cảm ơn nhiều ạ!
Public Function fGpe(ByVal Txt As String, Byval Deli As String) As String
Dim j As Long, N As Long, Tmp
Tmp = Split(Txt, Deli)
N = Tmp(0)
fGpe = N
If UBound(Tmp) > 0 Then
For j = 1 To UBound(Tmp)
N = N + Tmp(j)
fGpe = fGpe & Deli & N
Next j
End If
End Function
B1= fGpe(A1;"-")
A1= '1-2-3-4-5-6-7-8-9PHP:Public Function fGpe(ByVal Txt As String, Byval Deli As String) As String Dim j As Long, N As Long, Tmp Tmp = Split(Txt, Deli) N = Tmp(0) fGpe = N If UBound(Tmp) > 0 Then For j = 1 To UBound(Tmp) N = N + Tmp(j) fGpe = fGpe & Deli & N Next j End If End Function
PHP:B1= fGpe(A1;"-")
Bạn chỉnh công thức:Thầy ơi!
E đã add đoạn code trên vào Visual basic và sử dụng hàm" fGpe" theo hướng dẫn của thầy nhưng vẫn không ra kết quả ạ. Thầy xem lại giúp e với ạ!
E hỏi thêm nữa là trên Google trang tính có add được code vào không ạ?
E cảm ơn nhiều!View attachment 219689View attachment 219690View attachment 219691
Sửa =fGpe(A1;"-") thành =fGpe(A1,"-")
Bạn chỉnh công thức:
File lưu dạng .xlsm là đượcMã:Sửa =fGpe(A1;"-") thành =fGpe(A1,"-")
Google sheets có thể chạy macro nhưng là ngôn ngữ google app scrit vì thế không thể áp dụng đoạn code trên cho google sheets bạn nhéEm cảm ơn nhiều ạ!
Anh cho e hỏi chút về cách chèn code vào google trang tính được không ạ?
Google sheets có thể chạy macro nhưng là ngôn ngữ google app scrit vì thế không thể áp dụng đoạn code trên cho google sheets bạn nhé
bạn chờ anh chị khác đi ngang rành về ngôn ngư này sẽ giúp bạn.
A1= '1-2-3-4-5-6-7-8-9PHP:Public Function fGpe(ByVal Txt As String, Byval Deli As String) As String Dim j As Long, N As Long, Tmp Tmp = Split(Txt, Deli) N = Tmp(0) fGpe = N If UBound(Tmp) > 0 Then For j = 1 To UBound(Tmp) N = N + Tmp(j) fGpe = fGpe & Deli & N Next j End If End Function
PHP:B1= fGpe(A1;"-")
Tôi chưa dùng Google trang tính gì đó lần nào, nhưng có lẽ không sử dụng VBA của Excel được.Dạ vâng! Em cảm ơn ạ!
Bài đã được tự động gộp:
Em cảm ơn nhiều ạ!
Thầy cho e hỏi thêm chút nữa nữa là trên Google trang tính có add được code vào không ạ?
Tôi chưa dùng Google trang tính gì đó lần nào, nhưng có lẽ không sử dụng VBA của Excel được.
Có thành viên @yeudoi ở Miền Trung chuyên về cái này.
Code cho Google Sheet:
/**
Hàm cộng các chữ số của 1 số
*/
function CongTongChuSo(input) {
var tong = 0, boDonVi= input;
while ((input = boDonVi) > 0) {
boDonVi= Math.floor(input/10);
tong += input - boDonVi*10;
}
return tong;
}
/**
Hàm cộng dồn từng đoạn của dãy số
*/
function CongDonDaySo(input) {
var a = input.split("-");
for (var i=1; i < a.length; i++) a = Number(a) + Number(a[i-1]);
return a.join("-");
}
Tôi chỉ code đến vậy thôi. Muốn hỏi gì thêm thì nhớ 2 điều:
1. tôi không nói chuyện nửa Tây nửa Việt
2. tôi không nói chuyện viết tắt. Điển hình, từ "e" đối với kiến thức Việt ngữ của tôi thì có nghĩa là "ngại"
Code cho Google Sheet:
/**
Hàm cộng các chữ số của 1 số
*/
function CongTongChuSo(input) {
var tong = 0, boDonVi= input;
while ((input = boDonVi) > 0) {
boDonVi= Math.floor(input/10);
tong += input - boDonVi*10;
}
return tong;
}
/**
Hàm cộng dồn từng đoạn của dãy số
*/
function CongDonDaySo(input) {
var a = input.split("-");
for (var i=1; i < a.length; i++) a = Number(a) + Number(a[i-1]);
return a.join("-");
}
Tôi chỉ code đến vậy thôi. Muốn hỏi gì thêm thì nhớ 2 điều:
1. tôi không nói chuyện nửa Tây nửa Việt
2. tôi không nói chuyện viết tắt. Điển hình, từ "e" đối với kiến thức Việt ngữ của tôi thì có nghĩa là "ngại"
=CongDonDaySo(A1)...Sau khi thêm vào phần "công cụ"--> "chỉnh sửa tập lệnh" rồi thì hàm viết trên ô của trang tính là gì để ra kết quả ạ?
Ví dụ: A1= 1-3-4-2-5 thì sau khi viết hàm vào ô cộng dồn sẽ ra kết quả là 1-4-8-10-15
Chịu thua. Tôi thử chả thấy vấn đề gì.
Bỏ javascript lâu quá rồi, nên chịu thua. Lười![]()
Google sheets không sử dụng được VBA nha Bạn. Nếu bài bạn thì không cần Code vẫn có thể làm được. Bạn có thể vào Box Google spreadsheet để hỏi tiếp nha.Dạ vâng! Em cảm ơn ạ!
Bài đã được tự động gộp:
Em cảm ơn nhiều ạ!
Thầy cho e hỏi thêm chút nữa nữa là trên Google trang tính có add được code vào không ạ?
Code kia là viết cho custom function của Google sheets.Google sheets không sử dụng được VBA nha Bạn. Nếu bài bạn thì không cần Code vẫn có thể làm được. Bạn có thể vào Box Google spreadsheet để hỏi tiếp nha.
Google sheets không sử dụng được VBA nha Bạn. Nếu bài bạn thì không cần Code vẫn có thể làm được. Bạn có thể vào Box Google spreadsheet để hỏi tiếp nha.
Code kia là viết cho custom function của Google sheets.
Người hỏi hiển nhiên là có biết cách dùng code này. Chỉ là cái giao diện tiếng Việt cho nên tôi không rõ nó có vấn đề gì ở đây không.
Nhìn code thì đâu có là code VBA?Google sheets không sử dụng được VBA nha Bạn.
a[i] = Number(a[i]) + Number(a[i-1]);
function CongDonDaySo(input) {
var a = input.split("-");
for (var i=1; i < a.length; i++) a[i] = Number(a[i]) + Number(a[i-1]);
return a.join("-");
}
Nhìn code thì đâu có là code VBA?
Bác VetMini đang nói tới cái khác. Trong trình của tôi thì menu nó là tiếng Ba Lan nên tôi thử dịch. Mở tập tin -> menu Tools -> chọn Editor Script -> dán code.
@tuantran10391: bạn sửa
a = Number(a) + Number(a[i-1]);
thành
Tức phải cóMã:a[i] = Number(a[i]) + Number(a[i-1]);
Mã:function CongDonDaySo(input) { var a = input.split("-"); for (var i=1; i < a.length; i++) a[i] = Number(a[i]) + Number(a[i-1]); return a.join("-"); }
Cảm ơn bác đã chỉ ra cái lỗi căn bản đó.... bạn sửa
a = Number(a) + Number(a[i-1]);
thành
a = Number(a) + Number(a[i-1]);