VBA初心者です。
日報を入力する作業を、Exel VBAを使って省力化したいと考えています。
1日が1シート、1か月分で1ブックになっています。
いったん別シートにべた打ちしたデータを、VBAで1つずつ各日のシートに貼り付けたいのです。
1枚目のシートのB列のセルB2~B32(1日~31日分に相当)に数値が入っているとして、
これを格納し、
シート「1日」セルF2、シート「2日」セルF2...シート「31日」セルF2
という具合に各シートの同じセル番地のセルに1つずつ貼り付けていくイメージです。
こんなふうに書いてみました。
----------------------------------------
Sub test()
Dim myNum(30) As Integer
Dim i As Integer
Dim j As Integer
For i = 1 To 30
myNum(i) = Worksheets(1).Cells(i + 1, 2)
For j = 1 To 30
Worksheets(i + 1).Cells(2, 6) = myNum(i)
Next j
Next i
End Sub
----------------------------------------
でも、これでは1か月の日数の違いに対応できません。
これ以上はお手上げなので、お知恵を貸してください。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
#1です。
myNumがintegerだからですね。
そもそも、私が答えた方法だと、myNumは使う必要はありません。
If Worksheets(1).Cells(i + 1, 2) <> "" Then
Worksheets(i + 1).Cells(2, 6) = Worksheets(1).Cells(i + 1, 2)
End If
としてください。
一旦、myNumに入れると、未入力と0の区別が付かなくなったと思います。
ありがとうございます!
うまくいきました!!
これができると、来週から始まる膨大な作業がとても効率よく行えます。
ありがとうございました。
No.5
- 回答日時:
こんにちは!
横からお邪魔します。
Sheet1が入力用Sheetとして、Sheet2以降に各日付のSheetがあるとします。
※ 大の月・小の月がありますので、仮に月末セル(Sheet1のB32セル)が空白の場合もあるかと思います。
その場合はSheet32のF2セルも空白の方が良いとおもいますので、ごく単純に
Sub test1()
Dim i As Long
For i = 2 To 32
Worksheets(i).Cells(2, 6) = Worksheets(1).Cells(i, 2)
Next i
End Sub
こんな感じではどうでしょうか?
的外れならごめんなさいね。m(_ _)m
回答していただきありがとうございます。
的外れだなんて、とんでもない。
まさにこういうことがしたかったんです。
文章もVBAも分かりやすく簡潔で、すごく嬉しかったです。
2度のお手間を取らせた方にベストアンサーを差し上げましたが、
できるなら、tom04さんにもベストアンサーを差し上げたい気持ちです。
ありがとうございました。
No.4
- 回答日時:
For i = 1 To 30を
For i = 1 To Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row - 1
にしてはどうでしょうか。
For j = 1 To 30は記述を見る限り必要ないと思います。
回答していただきありがとうございます。
セル範囲を選択しておいて、
For i = 1 To Selection.count
とすることも考えたのですが…。
For i = 1 To Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row - 1
のほうが間違いないですね。
No.2
- 回答日時:
基本的にVBAでデータ(セルの値その他)を写すのは
(1)セルに代入法
(2)コピー貼り付け法
ガ在る。
本質問のコードは(1)に見える。
コピーと代入には差があるのは判っているよね。
>いったん別シートにべた打ちしたデータを、VBAで1つずつ各日のシートに貼り付けたいのです
質問にしっかり書くべきことは、べた打ちー>各日シートへデータを写すとき、セルの対応関係が同じ位置(行、列)で
無いのだろうがそのことを質問に書いてない。
その対応関係によっては、何十行の、代入のコードを書かなくてはならない。
ーーーー
質問文は長いが、全般に関係ないことを書いてないか?
本題の主題は
For i = 1 To 30
の30を、指定月の月末日にしたいということではないのか。
月の数字をどこかのセルに入れておいて(あるいは変数に入れておいて)、
例えばA列に1-12(月の数字)の数を入れておく、
Sub test01()
For i = 1 To 12
x = Cells(i, "A")
d = DateSerial(2011, x + 1, 1) - 1
Cells(i, "B") = Day(d)
Next i
End Sub
を実行してみる。
B列に月中日数が出る。
このやり方を応用すればしまい。エクセルVBAの定石だ。
ーー
質問のようなやり方は、入力時に参照する原書の項目レイアウトと、作りたいシートの項目順序・レイアウトを切り離せる。
配列に入れる必要は無いだろう。順序を整えて配列に入れるくらいならセルー>セルで代入してしまえば良いのでは。
回答ありがとうございます。
簡潔な質問を書けないこと事態が
初心者たるゆえんとご容赦いただければ。
ご指摘の通り、配列に入れる必要はありませんでしたね。
No.1
- 回答日時:
Sub test()
Dim myNum(31) As Integer
Dim i As Integer
Dim j As Integer
For i = 1 To 31
myNum(i) = Worksheets(1).Cells(i + 1, 2)
If myNum(i) <> "" Then
Worksheets(i + 1).Cells(2, 6) = myNum(i)
End If
Next i
では、いかがですか?
問題ありありですね。
早速の回答ありがとうございます。
セルが空欄かどうかで処理するわけですね。
なるほど!と思ったのですが…
If myNum(i) <> "" Then
のところで「型が一致しません」というメッセージが出てしまいます。
なぜでしょう?
重ねての質問で恐縮です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) VBA*セルに値があればシート名に反映 2 2023/02/21 14:52
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
複数シートの同じセル内容を1シ...
-
Rangeメソッドは失敗しました。...
-
INDIRECTを使わず excelで複数...
-
Excelシートの保護時にデータの...
-
シート参照で変数を使いたい(EX...
-
エクセルでデータがあるシート...
-
別シートのセルを絶対参照にする
-
(Excel)あるセルに文字を入力...
-
EXCELマクロで、シート間でのコ...
-
エクセルで指定のセルのみ完全...
-
エクセル ctrl+End いくら削...
-
エクセルで、勤務表から 日付...
-
エクセルで複写のように自動入...
-
ExcelでTODAY関数を更新させな...
-
Excelで複数シートの選択セルを...
-
エクエルにてシート複数選択を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで条件に一致したセル...
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
(Excel)あるセルに文字を入力...
-
エクセルで1月0日と表示される!!
-
別シートのセルを絶対参照にする
-
複数シートの同じセル内容を1シ...
-
Rangeメソッドは失敗しました。...
-
Excelシートの保護時にデータの...
-
エクセルで複写のように自動入...
-
Excelで複数シートの選択セルを...
-
シート参照で変数を使いたい(EX...
-
ExcelでTODAY関数を更新させな...
-
エクセル ハイパーリンクで画像...
-
エクセルで、加筆修正したセル...
-
エクセルのセルに、マウスで選...
-
EXCEL関数でシート名が変わる可...
-
VBAで、セル(Range)のオブジ...
-
Excelのファイル容量が減らない...
-
excelでハイパーリンクになって...
おすすめ情報