- ベストアンサー
2行目と3行目を1行目に右側につけて、空白を削除してつめるコードが知りたいです。
1 2 3 4 5 6 7 8 9 . . . A1「1」、A2「2」、A3「3」A4空白、A5「4」、、、と言う風なデータがあるの ですが、 これを 123 456 789 ... と言う風に2行目と3行目を1行目に右側につけて、空白を削除してつめるコー ドが知りたいです。 実際のデータは数値ではなく文字列です。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#02です >2をB列、3をc列と言う風にしたいです 関数なら、以下を同じシートの適当なセルに貼り付けて右方向、下方向にコピー =OFFSET($A$1,INT((ROW(A1)-1)*4)+COLUMN(A1)-1,0) マクロなら以下でできるでしょう Sub Macro1() Const trg As String = "A" '文字列が入力された列を指定する Dim idx, cnt As Long Dim act As Worksheet Set act = ActiveSheet Worksheets.Add after:=act For idx = 1 To act.Cells(65536, trg).End(xlUp).Row Step 4 cnt = cnt + 1 Cells(cnt, trg).Value = act.Cells(idx, trg).Value Cells(cnt, trg).Offset(0, 1).Value = act.Cells(idx, trg).Offset(1).Value Cells(cnt, trg).Offset(0, 2).Value = act.Cells(idx, trg).Offset(2).Value Next idx End Sub
その他の回答 (4)
- n-jun
- ベストアンサー率33% (959/2873)
>B列、c列に移したいです。よろしくお願いします。 だとすると、 Sub test() Dim v, x Dim i As Long With ActiveSheet v = .Range(.[A1], .Cells(Rows.Count, 1).End(xlUp)).Value ReDim x(1 To (UBound(v) + 1) / 4, 1 To 3) For i = 1 To UBound(x, 1) x(i, 1) = v((i - 1) * 4 + 1, 1) x(i, 2) = v((i - 1) * 4 + 2, 1) x(i, 3) = v((i - 1) * 4 + 3, 1) Next .Range("A:A").ClearContents .Range("A1").Resize(UBound(x, 1), 3).Value = x End With End Sub こんな感じでしょうか?
お礼
大変参考になりました。ご回答ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
同一シート(のF列に出す例)でよいなら Sub test01() d = Range("A65536").End(xlUp).Row k = 1 For i = 1 To d Step 4 Cells(k, "F") = Cells(i, "A") & Cells(i + 1, "A") & Cells(i + 2, "A") k = k + 1 Next i End Sub ーー データ例A1:A11 a b c d e f g h i ーー F1:F3 abc def ghi 既回答とほぼ同じですが。
お礼
大変参考になりました。ご回答ありがとうございます。
- zap35
- ベストアンサー率44% (1383/3079)
「コード」とありますがマクロでなくても関数でできます。同じシートの適当なセルに以下の式を貼り付けて下方向にコピーしてください。ただしデータはA列にあるものとしています。違う列なら「$A$1」を「$C$1」のように変更してください。「Z1」の箇所は行番号を生成するためのものですから変更は不要です。 =OFFSET($A$1,INT((ROW(Z1)-1)*4),0)&OFFSET($A$1,INT((ROW(Z1)-1)*4+1),0)&OFFSET($A$1,INT((ROW(Z1)-1)*4+2),0) またマクロがよいなら以下のようなサンプルでもできます。 元のデータは消してしまわないよう、新しいシートに書き込むようにしています。データ列は2行目で指定してください Sub Macro1() Const trg As String = "A" '文字列が入力された列を指定する Dim idx, cnt As Long Dim act As Worksheet Set act = ActiveSheet Worksheets.Add after:=act For idx = 1 To act.Cells(65536, trg).End(xlUp).Row Step 4 cnt = cnt + 1 Cells(cnt, trg).Value = act.Cells(idx, trg).Value & _ act.Cells(idx, trg).Offset(1).Value & act.Cells(idx, trg).Offset(2).Value Next idx End Sub でも実際のシートは質問通りではないように思いますので修正が必要かもしれませんね。もしそうならご自身で修正してください。
補足
回答していただいて申し訳ないのですが、2をB列、3をc列と言う風にしたいです。説明不足ですいません。よろしくお願いします。
- n-jun
- ベストアンサー率33% (959/2873)
>と言う風に2行目と3行目を1行目に右側につけて ひとつのセルに連結させるのですか? それとも、B・C列に移すのですか?
お礼
B列、c列に移したいです。よろしくお願いします。
お礼
大変参考になりました。ご回答ありがとうございます。