
VBA初心者なので非常に初歩的な質問ですみません。
複数列に入った計算式を何セットかコピーして、計算式の内容を置換していきたいのです。
8セットくらいなのでベタで書いてもいいのですが、簡潔にまとめる方法があったら教えてください。
初心者的なVBAですが、コピーは以下のように書きました。
※作成したい計算列は8個(元を入れて)
※元の計算式は AD:AM の列に入っています。
Sub Macro1()
Dim cx As Variant
Dim C1 As Variant
Dim C2 As Variant
Dim C3 As Variant
Dim C4 As Variant
Dim C5 As Variant
Dim C6 As Variant
Dim C7 As Variant
Dim C8 As Variant
C1 = "AD:AM"
C2 = "AO:AX"
C3 = "AZ:BI"
C4 = "BK:BT"
C5 = "BV:CE"
C6 = "CG:CP"
C7 = "CR:DA"
C8 = "DC:DL"
Columns(C1).Select
Selection.Copy
For Each cx In Array(C2, C3, C4, C5, C6, C7, C8)
Columns(cx).Select
ActiveSheet.Paste
Next
End Sub
このあとにコピーした計算式に含まれる列名を置換します。
ベタで書くと以下のようになります。
Columns(C2).Select
Selection.Replace What:="$G", Replacement:="$J", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="$F", Replacement:="$I", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
C2の範囲では$G⇒$J、$F⇒$Iと置換します。
$Gと$Fは固定です。
置換する列名は以下の通りです。
$G⇒"$J", "$M", "$P", "$S", "$V", "$Y", "$AB"
$F⇒"$I", "$L", "$O", "$R", "$U", "$X", "$AA"
C2~C8の範囲で上記が変化していきます。
この「セットで変化」がどうやっても解決しません。
初歩的な質問で大変申し訳ないのですが、よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんにちは。
> ベタで書くと以下のようになります。
この程度の件数なら悩むより、ベタに書いた方が話は速いですよ。
> この「セットで変化」がどうやっても解決しません。
まとめて1回で置換ということはできません。繰り返し置換するだけです。
一例です。
列全体をコピー貼り付けというのは強引過ぎる気がしますけども...
Sub TestProc()
Dim r As Range
Dim vReplaceG As Variant
Dim vReplaceF As Variant
Dim i As Long
Const COL_SRC = "AD:AM" ' // 数式ソース範囲
Const COL_LST = "AO:AX,AZ:BI,BK:BT,BV:CE,CG:CP,CR:DA,DC:DL" ' // 数式貼り付け先
vReplaceG = Split("$J,$M,$P,$S,$V,$Y,$AB", ",") ' // $G 変換リスト
vReplaceF = Split("$I,$L,$O,$R,$U,$X,$AA", ",") ' // $F 変換リスト
i = 0
For Each r In Range(COL_LST).Areas
Range(COL_SRC).Copy Destination:=r
r.Replace What:="$G", Replacement:=vReplaceG(i), LookAt:=xlPart
r.Replace What:="$F", Replacement:=vReplaceF(i), LookAt:=xlPart
i = i + 1
Next
End Sub
回答ありがとうございます。
おっしゃる通りベタで書いても問題ないのですが、
同じ様なことをよくやるので、どうにかこの機会に方法を見つけて
見たかったのです。
(結局自分で解決できずお願いしてしまいましたが)
おかげさまで解決です。
非常に勉強になりました。ありがとうございました。
No.1
- 回答日時:
こんにちは。
ざっと見た感じですが、
最初のマクロは、
Sub MacroTest1()
Columns("AD:AM").Copy _
Range("AO:AX,AZ:BI,BK:BT,BV:CE,CG:CP,CR:DA,DC:DL")
End Sub
ということだと思います。
C2を含めて変換していくとして、絶対参照でこうなっているとすれば、
$G⇒"$J", "$M", "$P", "$S", "$V", "$Y", "$AB"
$F⇒"$I", "$L", "$O", "$R", "$U", "$X", "$AA"
以下のようになると思います。
Sub MacroTest2()
Dim r As Range
Dim i As Long
Set r = Range("C2:C8") '範囲
For i = 1 To r.Count
r.Cells(i).FormulaR1C1 = Replace(r.Cells(i).FormulaR1C1, "C7", "C" & 7 + i * 3)
r.Cells(i).FormulaR1C1 = Replace(r.Cells(i).FormulaR1C1, "C6", "C" & 6 + i * 3)
Next i
Set r = Nothing
End Sub
回答ありがとうございます。
そもそも複数範囲へのコピーがこれほどあっさりできるとは・・・。
本当に素人ですみません・・・。
コピーのほうはできたのですがtest2()は、何が起きたのかわからない
くらいのあいだに終了してしまって何もおきません・・・。(涙)
内容はなんとなくわかるので(なんとなくのレベルですみません)
自分でやってみます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切り形式ではなく、セ...
-
エクセルの”?”の置換について
-
アウトルックエクスプレスのア...
-
複数フォルダ内のファイルの文...
-
外部参照する時のファイル名を...
-
ファイル名をいっきに編集...
-
Excelで外部book参照の参照先を...
-
コピー/貼り付けの方法
-
tan(x/2)=tと置く置換積分について
-
まとめてリンクが張れるフリー...
-
【ExcelVBA】複数の変数をセッ...
-
複数の置換を1回だけの操作でや...
-
エクセル2002での単純な文字置...
-
imageフォルダの名前を変えたい...
-
こんな一括置換ツールはご存知...
-
エクセルについて
-
置換されてる女たすけます?俺...
-
EXELでの文字列の一部抽出
-
エクセルのオートフィルタ編集...
-
生年月日の変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切り形式ではなく、セ...
-
txtファイル内の指定の単語の数...
-
Wordチェックボックス作り方(...
-
Ctrl+Hで置換にならない
-
秀丸エディタ タブをカンマに...
-
ExcelのROUND関数を一括解除し...
-
エクセルで置換リストを別ブッ...
-
エクセル 置換中の値の更新
-
ワードでの検索、置換モードの...
-
WORDで一括置換
-
パワーポイントの置き換えマクロ
-
アクセスのテーブル上でデータ...
-
エクセルでアルファベット5段階...
-
EXCELのデータをWORD...
-
複数PDFファイル内の特定文字列...
-
word 編集の制限 保護されたま...
-
MAC版Word(2011)で一括で曜日...
-
Accessで、特定の記号を削除し...
-
正規表現の置換で一部の文字列...
-
Flexible Renamerの正規表現の...
おすすめ情報