エクセルのVBA初心者です。

Visual Basic46閲覧

ベストアンサー

0

ThanksImg質問者からのお礼コメント

回答いただきありがとうございました。 お陰さまで、なんとか解決できました。

お礼日時:5/28 8:03

その他の回答(1件)

0

これだと Workbooks . Open ThisWorkbook.Path & "\一覧¥”& f . Cells(i.1) g.Range("A" & r & ":" & "PA" & r).Value = Sheets("申告書データ”).Range("A2:PA2").Value ①.開いたブックがアクティブになって、 ②.①のブックのSheets("申告書データ”)から値をとってきて、 ③.①のブックのSheets("申告書”)にいれるってなりませんかね? 質問者が作ったマクロじゃないかもしれませんし、 質問回答とは違いますが、あまりにひどかったので、書込みします。 なんというか読みにくい、いや読みにくいコードですね。 これ他人が修正しようにも、理解しづらく直す気力なくします。 自分が書いても、1ヶ月もすれば意味不明になるレベル。 1文字変数がやたらでてくるが、 ループカウンタのiは、一般的に使われるからいいが、 「 Dim r As Long」え? r をLongで宣言? 「Dim f As Worksheet」え? シートなのに fで宣言?ファイルと勘違いしやすい 「Dim g As Worksheet」gがワークシート 何故に? といちいち宣言時と設定から変数を追わないと理解できないので、読む気がなくなる。 こんなコードを修正依頼だすのか思うレベルです。 また g.Range("A" & r & ":" & "PA" & r).Value = Sheets("申告書データ”).Range("A2:PA2").Value マクロ実行したブックと開いたブックがあって、それぞれの処理っぽいのですが、 「Sheets("申告書データ”).Range("A2:PA2").Value」 ブックの指定がないので、バグになりやすい。きちんとブックを指定してあげたほうがいい。 あとセルの指定で g.Range("A" & r & ":" & "PA" & r).Value とあるけど、セルの座標をカウンター「r」で動的に生成しているなら Rangeの()をCellsを使うことを勧めます。 Range(Cells(r,"A"),cells(r,"PA")) でもいいですが、 Range(Cells(r,1),cells(r,417)) どちらも数値のほうが、行列の変更をし易いです。 Range(Cells(r,1+i),cells(r,417+2))とかできますし 文字列連結して範囲するより、すっきりします。