マクロ初心者です、シートを変える手法ないでしょうか?下記コードがダサすぎて自分が嫌になっています。。。雑すぎというのも理解していますが・・・
もっとシンプルに仕上げたいのですが何かないでしょうか?ご教示お願いします。
Sub 単月データ読込()
Dim ws As String
Dim val As String
Dim k
k = 11
Dim l
l = 12
Dim m
m = 13
ws = "今年度一覧"
val = "201605"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201606"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201607"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201608"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201609"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201610"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201611"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201612"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201701"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201702"
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
ws = "今年度一覧"
val = "201703"
Call shiteidata(ws, val, k, l, m)
MsgBox "処理が完了しました。"
End Sub
Sub shiteidata(ByVal ws As String, ByVal val As String, ByVal k As Long, ByVal l As Long, ByVal m As Long)
Dim w
Set w = Worksheets(ws)
Dim i '201605の行カウント
i = 8
Dim n '今年度一覧の行カウント
n = 8
w.Select
Do Until Worksheets(val).Cells(i, 1) = ""
If Worksheets(val).Cells(i, 1) = "" Then
Else
If w.Range("b" & n).Value = Worksheets(val).Cells(i, 2).Value Then '今年度一覧のコード1が201605のコード1と同じ
w.Cells(n, k).Value = Worksheets(val).Cells(i, 5).Value
w.Cells(n, l).Value = Worksheets(val).Cells(i, 6).Value
w.Cells(n, m).Value = w.Cells(n, k).Value - w.Cells(n, l).Value
' w.Range("k" & n).Value = Worksheets(val).Cells(i, 5).Value
' w.Range("l" & n).Value = Worksheets(val).Cells(i, 6).Value
' w.Range("m" & n).Value = w.Range("k" & n).Value - w.Range("l" & n).Value
n = 8
i = i + 1
Else '今年度一覧のコード1が201605のコード1と違う
If w.Range("a" & n) = "" Then
n = Cells(Rows.Count, 1).End(xlUp).Row + 1 ' nに最終行を入れて書込む行を最終行にする
w.Range("b" & n).Value = Worksheets(val).Cells(i, 2).Value
w.Range("c" & n).Value = Worksheets(val).Cells(i, 3).Value
w.Range("d" & n).Value = Worksheets(val).Cells(i, 4).Value
w.Cells(n, k).Value = Worksheets(val).Cells(i, 5).Value
w.Cells(n, l).Value = Worksheets(val).Cells(i, 6).Value
w.Cells(n, m).Value = w.Cells(n, k).Value - w.Cells(n, l).Value
' w.Range("k" & n).Value = Worksheets(val).Cells(i, 5).Value
' w.Range("l" & n).Value = Worksheets(val).Cells(i, 6).Value
' w.Range("m" & n).Value = w.Range("k" & n).Value - w.Range("l" & n).Value
w.Range("a" & n).Value = n - 7
w.Range("a" & n).Resize(1, 43).Borders.LineStyle = xlContinuous
i = i + 1
n = 8
Else
n = n + 1
End If
End If
End If
Loop
w.AutoFilterMode = False 'フィルタ結果を取得したので解除
' Application.ScreenUpdating = False
w.Select
Range("A3").Select
End Sub
No.1ベストアンサー
- 回答日時:
Sub 単月データ読込()
Dim ws As String
Dim val As String
Dim i As long
Dim 年 As long
Dim 月 As long
k = 11
Dim l
l = 12
Dim m
m = 13
ws = "今年度一覧"
年=2016
月=5
For i = 1 to 11
val = 年 & left("0" & 月,2)
Call shiteidata(ws, val, k, l, m)
k = k + 3
l = l + 3
m = m + 3
月=月+1
if 月=13 then
年=2017
月=1
End if
Next i
MsgBox "処理が完了しました。"
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPでこのコード自体に意味は無...
-
3つの連想配列を交互に代入し...
-
PHPで連想配列のプルダウンメニ...
-
foreachで上限回数指定方法また...
-
Excel VBAでフィルター後の対象...
-
PHP、{}記号の意味
-
ftokが動かない?
-
関数をの引数について。
-
phpでforeachの中にforeachがあ...
-
リストボックス複数選択抽出方法
-
プログラミングのPythonのnoteb...
-
プルダウンメニューにDBの内容...
-
file_existsでファイル名の部分...
-
PHPのmin関数、「1」以上の数値...
-
スカラーのベクトル微分
-
Perlで重複行を削除したい
-
特定の文からメールアドレスの...
-
MySQLのデータをPHPで多次元...
-
配列をループでたくさん宣言し...
-
数独かを判断するプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マッチング処理(1:N)
-
smartyのforeachの使い方
-
foreachで上限回数指定方法また...
-
多次元配列を、1次元の配列にす...
-
foreachの間にテーブルの<TR>を...
-
PHP、{}記号の意味
-
$_POST受信で必要項目のみを結...
-
3つの連想配列を交互に代入し...
-
VB.NET で 二次元のハッシュは...
-
PHP:ツリー構造をulとli要素に...
-
foreachで配列を、左から縦3列...
-
PHPの構文で間違えが分からない
-
PHPで連想配列のプルダウンメニ...
-
添え字が全て文字列のPHPの多次...
-
POSTで渡されるデータの数がわ...
-
テーブルデータ表示
-
Smartyでインクリメント
-
PHPで変数名にハイフンを使うに...
-
Delphi XEの警告文を消したい
-
配列から順位を算出したい
おすすめ情報