[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『列方向(のデータをE結合する』(いつもはROMの人)
列方向(A列・B列・C列)のデータをE列へ結合する場合は下記のコードですが
3列と決まっていない場合は、どのように変更すれば良いですか?
(書き出しは、最終列の2つ右とします 例: FならH)
'
Sub test() '列方向の文字列結合
Dim Temp01(), Temp02(), Temp03(), Array01(), Str() As Variant Dim I, lRow As Long
lRow = Cells(Rows.Count, "C").End(xlUp).Row 'C列の最終列を取得します。
Array01 = Range("A1:C" & lRow) 'A1〜C列の最終行までデータを2次元配列で登録します。
Temp01 = WorksheetFunction.Index(WorksheetFunction.Transpose(Array01), 1) 'A列のデータをTemp01へ分割 Temp02 = WorksheetFunction.Index(WorksheetFunction.Transpose(Array01), 2) 'B列のデータをTemp01へ分割 Temp03 = WorksheetFunction.Index(WorksheetFunction.Transpose(Array01), 3) 'C列のデータをTemp01へ分割
ReDim Str(UBound(Temp01)) 'Strの配列をA列の配列件数で再定義
For I = 1 To UBound(Temp01) 'A列のデータ分繰り返します。 Str(I - 1) = Temp01(I) & "-" & Temp02(I) & "-" & Temp03(I) '分割したA列・B列・C列のデータを再結合。 Next I
Range("E1:E" & UBound(Temp01)) = WorksheetFunction.Transpose(Str) 'E列に結合したデータを全て書き出し。
End Sub
コード書き始めましたが以下ではうまく処理できません。
'----------------------------------------------
Sub test2() '文字列結合
Dim Temp(), Ary(), Str(), moji() As Variant Dim i As Long, ii, iii As Long Dim Lver, Lhor As Long Dim ws1, ws2 As Worksheet
Set ws2 = Sheets("Sheet1") Set ws2 = Sheets("Sheet2")
Lver = ws2.Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終列を取得 Lhor = ws2.Cells(1, Columns.Count).End(xlToLeft).Column 'A列の最終列を取得
''A1〜使用している最終レンジまでのデータを2次元配列で登録 Ary = Range(Cells(1, 1), Cells(Lver, Lhor))
ReDim Temp(1 To Lhor)
For i = 1 To Lhor
Temp = WorksheetFunction.Index(WorksheetFunction.Transpose(Ary), i) 'データをTempへ分割 Next
< 使用 Excel:Excel2021、使用 OS:Windows10 >
Sub test() Dim ws As Worksheet Dim Lver, Lhor As Long, adr As String Set ws = Sheets("Sheet1") Lver = ws.Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 Lhor = ws.Cells(1, Columns.Count).End(xlToLeft).Column 'A列の最終列を取得 adr = ws.Range("A1").Resize(, Lhor).Address(0, 0) With ws.Cells(1, Lhor + 2).Resize(Lver) .Formula = "=TEXTJOIN(""-"",TRUE," & adr & ")" .Value = .Value End With End Sub
>Dim Lver, Lhor As Long >Dim ws1, ws2 As Worksheet これだと、Lverとws1はvariant型になります。(variant型なのでコードは動く)
Dim Lver As Long, Lhor As Long 変数一つに対して型を宣言する必要があります。
(フォーキー) 2023/03/18(土) 09:34:57
すごくスマートな短いコードになるのですね。
コードで不明点がありましたので教えてください。
> .Value = .Value
無くても書き出しは行われますがなぜわざわざ書く必要があるのですか?
教えてもらったコードでは、2回めを実行するとLhorが更新されるので書き出し先も
更新されて更に2つ先になります。
(実行する回数が増えるとどんどん書き出し先が右に移動する)
複数回実行しても書き出し先は、最初の最終列の2つ右に固定したいです。
(いつもはROMの人) 2023/03/18(土) 11:08:19
>無くても書き出しは行われますがなぜわざわざ書く必要があるのですか?
その後利用しないのであれば、
式を残すより値に変換したほうが、処理効率や容量の節約などの面で有効と考えられたのでしょうね。
(山河) 2023/03/18(土) 12:52:14
後ろからチェックせずに前方から最終列を取得するに変更して
書き出しセルの問題は解決しました。
.Value = .Valueは、式のママではなく値に変換しているのですね。
見た目は同じなので気が付きませんでした。
皆様のアドバイスで解決しました。
(いつもはROMの人) 2023/03/18(土) 14:03:53
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.