Board logo

標題: [發問] 請教VBA 兩行儲存格的字串合併問題~~~~~~~~~~ [打印本頁]

作者: ji12345678    時間: 2012-11-20 22:23     標題: 請教VBA 兩行儲存格的字串合併問題~~~~~~~~~~

[attach]13218[/attach]:(
Sub TEST()
    ' Worksheets("Sheet1").Range("A1:A65530") = Worksheets("Sheet1").Range("B1:B65530") & Worksheets("Sheet1").Range("C1:C65530") '型態不符合
   
    all_number = ThisWorkbook.Sheets("Sheet1").Range("B65536").End(xlUp).Row
    For I = 2 To all_number
      Cells(I, 1) = Trim(Cells(I, 2)) & Trim(Cells(I, 3))
    Next I
End Sub

有沒有辨法不跑迴圈,一個個組合字串,
可有方法類似Range  大範圍的組合字串,謝謝~~~指教
[attach]13218[/attach]
作者: stillfish00    時間: 2012-11-20 23:40

回復 1# ji12345678
不用迴圈..
  1. Sub TEST()
  2.     With Sheets("Sheet1").Range("A2:A" & Sheets("Sheet1").Range("B65536").End(xlUp).Row)
  3.         .FormulaR1C1 = "=trim(RC[1])&trim(RC[2])"
  4.         .Value = .Value
  5.     End With
  6. End Sub
複製代碼

作者: ABK    時間: 2020-7-16 21:58

請教一下!  
依上例 若是要在組合字串的中間加入一個減號"-" , 程式要怎樣修改 ?
如下:
1-橋本
2-高山
3-岡田
作者: 准提部林    時間: 2020-7-17 10:09

回復 3# ABK


.FormulaR1C1 = "=trim(RC[1])&""-""&trim(RC[2])"
作者: ABK    時間: 2020-7-17 12:49

回復 4# 准提部林


謝謝准提大 !   OK 了!
作者: ABK    時間: 2020-7-31 22:15

我想沿用這個程式在A欄填入公式 , 用來計算B欄的值是第幾次重複, 但是有錯誤, 請教大大們要如何修正
   或是不填入公式, 可以用程式 直接算出重複第幾次更好。

Sub sheet1_Formula()

With Sheets("sheet1").Range("A2:A" & Sheets("sheet1").Range("B65536").End(xlUp).Row)
        .FormulaR1C1 = "=COUNTIF($B$2:$B" & ROW() & ",B" & Row())-1"   '填入公式

        .Value = .Value
    End With

End Sub
作者: ABK    時間: 2020-7-31 22:41

回復 6# ABK


    更正:  上面的程式是用來計算重複的次數, 不是填入公式。
作者: n7822123    時間: 2020-8-1 02:19

回復 7# ABK


這個方法 "FormulaR1C1"  是R1C1表示法的公式

你原本的公式寫法比較像一般的公式,請用 "Formula"

Excel 很聰明的,只要用VBA在連續範圍填入 範圍內第一格公式就好了~~

其它格公式相當於右拉下拉~

以此範例,只要在範圍內填入 A2需要的公式即可...不用再寫 Row()這種函數

先填入公式再轉值 寫法如下

Sub sheet1_Formula()
Rn& = [sheet1!B65536].End(3).Row
With [sheet1!A2].Resize(Rn - 1)
        .Formula = "=COUNTIF($B$2:$B2,B2)-1"    '填入A2的公式
        .Value = .Value
End With
End Sub


不用Excel工作表函數的VBA寫法
Sub sheet1_VBA()
Dim Arr, Brr, R&, S$
Arr = Range([A2], [B65536].End(3))
For R = 1 To UBound(Arr)
    S = S & "," & Arr(R, 2)
    Brr = Split(Mid(S, 2), ",")
    Arr(R, 1) = UBound(Filter(Brr, Arr(R, 2)))
Next R
Range([A2], [B65536].End(3)) = Arr
End Sub



很顯然~~第一種寫法簡單多了,這要歸功於Excel的聰明

作者: 准提部林    時間: 2020-8-1 09:28

回復 6# ABK

字典+陣列, 可解決很多基本需求, 可花些時間學習:
Sub sheet1_VCunt()
Dim Arr, i&, xD, T$
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([Sheet1!B1], [Sheet1!B65536].End(xlUp))
For i = 2 To UBound(Arr)
    T = Arr(i, 1)
    Arr(i - 1, 1) = Val(xD(T))
    If T <> "" Then xD(T) = xD(T) + 1
Next i
[A2].Resize(UBound(Arr) - 1) = Arr
End Sub
作者: ABK    時間: 2020-8-11 18:26

回復 8# n7822123


    感謝阿龍大 熱心給了兩個程式 !
作者: ABK    時間: 2020-8-11 18:32

回復 9# 准提部林


    感謝准堤大熱心回復和提點 , 小弟會再多找些字典+陣列的文章來研究學習。
作者: ABK    時間: 2020-8-11 20:02

Try and Error 試出來的:

Sub sheet1_Formula()

With Sheets("sheet1").Range("A2:A" & Sheets("sheet1").Range("B65536").End(xlUp).Row)
     .FormulaR1C1 = "= ""=COUNTIF($B$2:$B"" & Row() & "",B"" & Row() & "")-1"""
     .Value = .Value
    End With

End Sub




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)