プロが教えるわが家の防犯対策術!

VBA超初心者です。
エクセルマクロを使って、以下の処理を実行したいのですが、うまくいきません。

■ABCDEFGH
1あい
2うえ
3おか
4きく
5けこ
6さし

■ABCDEFGH
1  あいうえおか
2  きくけこさし
3  すせ・・・・  


---

Cells(j, i).Select
Selection.Cut Destination:=Selection.Offset(-j + 1, 2 * j + 1)

で1行目は動きましたが、2行目以降がまったく動きません。

御教授の程、宜しくお願いします。

A 回答 (4件)

excelvbaへの道


http://www.voicechatjapan.com/excelvba/VBArei2.htm
よく使うところ提供します。
ここが一番というわけでもないですが。

こういうところはたくさんあるので参考に。
試している「OFFSET」についても記載あります。
    • good
    • 0

あえて、元のマクロを直しみました。

決して、私の流儀の書き方ではないのですが、Cells に数式を入れてもよいですが、ごちゃごちゃした数式をセルに入れるのは、みっともないのでら、以下のようにしました。

Sub Sample()
Dim i As Long, j As Long
Dim u As Long, x As Long, y As Long
Dim rng As Range
Set rng = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Resize(, 2) 'Aから2列
  For i = 1 To Int(rng.Count / 2 + 0.9)
   For j = 1 To 2 '2列
    u = Int(i - 1) * 2 + j
    x = Int((u - 1) / 6) + 1 '1行目
    y = (u - 1) Mod 6 + 1 + 3 'D列
    Cells(i, j).Cut Cells(x, y)
  Next
 Next
End Sub


もう少しマクロらしくしてみました。(標準モジュール用)
''=====
'//
Sub TestMacro1()
 Dim rng As Range
 Dim Ar() As Variant
 Dim i As Long, j As Long, k As Long
 '//設定開始
 Const RW As Long = 1 'スタート行
 Const COL As Long = 4 'スタートD列目
 Const NUM As Long = 6 '桁
 '元のデータ範囲
 Set rng = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Resize(, 2)
 '//設定終了
 
 ReDim Ar(rng.Count - 1)
 For Each c In rng
  Ar(k) = c.Value
  k = k + 1
 Next
 k = 0
 Application.ScreenUpdating = False
 For i = RW To Int(rng.Count / NUM + 0.9) + RW - 1
  For j = 0 To NUM - 1
   Cells(i, COL + j).Value = Ar(k)
   k = k + 1
   If k > rng.Count - 1 Then Exit For
  Next
 Next
 Application.ScreenUpdating = True
 rng.ClearContents
 Set rng = Nothing
End Sub
    • good
    • 0

処理1回目


1行目から2カラムを1行目2カラム目右へ

処理2回目
1行目+1から2カラムを1行目2カラム目+2×1右へ

処理3回目
1行目+2から2カラムを1行目2カラム目+2×2右へ

こういう時やりたいことと合っているか順に追いかけて整理してみて下さい。
1回目「あ」「い」分は処理不要ですか。
    • good
    • 0

htmlでは、半角スペースやタブコードが続くと、1つの半角スペースに変換されてしまうので、半角スペースでレイアウトの調整をするのはやめましょう。


スペースを□とか_とかで代用するとかしましょう。


で、このコード、i と j には、何が入っているのでしょうか?
このコードは繰り返し処理を行っていないので、一度しか処理されませんよ。
2行目以降が動かないのは、そのためじゃないですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!