• ベストアンサー

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行目に右側につけて、空白を削除してつめるコー ドが知りたいです。 実際のデータは数値ではなく文字列です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.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

noname#150256
質問者

お礼

大変参考になりました。ご回答ありがとうございます。

その他の回答 (4)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

>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 こんな感じでしょうか?

noname#150256
質問者

お礼

大変参考になりました。ご回答ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

同一シート(の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 既回答とほぼ同じですが。

noname#150256
質問者

お礼

大変参考になりました。ご回答ありがとうございます。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

「コード」とありますがマクロでなくても関数でできます。同じシートの適当なセルに以下の式を貼り付けて下方向にコピーしてください。ただしデータは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 でも実際のシートは質問通りではないように思いますので修正が必要かもしれませんね。もしそうならご自身で修正してください。

noname#150256
質問者

補足

回答していただいて申し訳ないのですが、2をB列、3をc列と言う風にしたいです。説明不足ですいません。よろしくお願いします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>と言う風に2行目と3行目を1行目に右側につけて ひとつのセルに連結させるのですか? それとも、B・C列に移すのですか?

noname#150256
質問者

お礼

B列、c列に移したいです。よろしくお願いします。

関連するQ&A