- 締切済み
VBA超初心者です。
VBA超初心者です。 エクセルマクロを使って、以下の処理を実行したいのですが、うまくいきません。 ■ABCDEFGH 1あい 2うえ 3おか 4きく 5けこ 6さし ↓ ■ABCDEFGH 1 あいうえおか 2 きくけこさし 3 すせ・・・・ 4 5 --- Cells(j, i).Select Selection.Cut Destination:=Selection.Offset(-j + 1, 2 * j + 1) で1行目は動きましたが、2行目以降がまったく動きません。 御教授の程、宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- layy
- ベストアンサー率23% (292/1222)
excelvbaへの道 http://www.voicechatjapan.com/excelvba/VBArei2.htm よく使うところ提供します。 ここが一番というわけでもないですが。 こういうところはたくさんあるので参考に。 試している「OFFSET」についても記載あります。
- Wendy02
- ベストアンサー率57% (3570/6232)
あえて、元のマクロを直しみました。決して、私の流儀の書き方ではないのですが、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
- layy
- ベストアンサー率23% (292/1222)
処理1回目 1行目から2カラムを1行目2カラム目右へ 処理2回目 1行目+1から2カラムを1行目2カラム目+2×1右へ 処理3回目 1行目+2から2カラムを1行目2カラム目+2×2右へ こういう時やりたいことと合っているか順に追いかけて整理してみて下さい。 1回目「あ」「い」分は処理不要ですか。
- nattocurry
- ベストアンサー率31% (587/1853)
htmlでは、半角スペースやタブコードが続くと、1つの半角スペースに変換されてしまうので、半角スペースでレイアウトの調整をするのはやめましょう。 スペースを□とか_とかで代用するとかしましょう。 で、このコード、i と j には、何が入っているのでしょうか? このコードは繰り返し処理を行っていないので、一度しか処理されませんよ。 2行目以降が動かないのは、そのためじゃないですか?