
No.3ベストアンサー
- 回答日時:
#2です
コードを拡大してよくよく見てみました。。。
こんな感じかな、、
Filename:=は暫定値
Dim x As Workbook
Dim thisSheet As Worksheet
Dim i As Long
Set thisSheet = ActiveSheet
Set x = Workbooks.Open(Filename:="XXX", ReadOnly:=True)
With Worksheets("日報用")
.Activate
.Calculate
End With
If _
thisSheet.Name = "【3月】業務処理" _
Or thisSheet.Name = "【6月】業務処理" _
Or thisSheet.Name = "【9月】業務処理" _
Or thisSheet.Name = "【12月】業務処理" Then
For i = 6 To 28
If thisSheet.Cells(i, 1).Value = x.Worksheets("日報用").Range("B3").Value Then
thisSheet.Cells(i, "AJ").Resize(, 3).Value = x.Worksheets("日報用").Range("C6:E6").Value
End If
Next
Else
For i = 6 To 28
If thisSheet.Cells(i, 1).Value = x.Worksheets("日報用").Range("B3").Value Then
thisSheet.Cells(i, "AI").Resize(, 3).Value = x.Worksheets("日報用").Range("C6:E6").Value
End If
Next
End If
x.Close SaveChanges:=False
End Sub
ループは分けていますが、、参考程度で
見づらい資料を細かく見ていただき感謝いたします。今日勤務先で修正したところやりたいことがすんなり実行できました。
IfとForの組み合わせ方、Elseで<それ以外のシート名>の指定は不要なこと、コピーして値貼り付けではなくValueでできること、Resizeという記述方法等大変勉強になりました。また機会がありましたら、よろしくお願いいたします。ありがとうございました。
No.2
- 回答日時:
こんにちは
なさりたい事とコードを拝見すると
先ず直すべき点があるように思います。
Dim x As Workbook
Set x = Workbook.Open(Filename:="XXX", ReadOnly:=True)
’以下は休暇予定表ブックに日報用シートが存在しないとエラーになるかと、、
With Worksheets("日報用")
.Activate
.Calculate
End With
'Set x =は不要かな、、、
これ以降にシート選択もしくはActivateしていないので
ThisWorkbook.ActiveSheet.Name は "日報用"となっています。
また、ThisWorkbookとX(休暇予定表ブック)をよく考えてみてください
ThisWorkbookはVBAが実行されているBookです。
Xは開いた(休暇予定表)ブックです。
コードはコピペがうれしいな、、、読みにくいのと、手書きするの面倒に感じる方少なくないと思いますよ
回答ありがとうございます。職場で使用していてコードが送れず、画像にしましたが、わかりづらくて申し訳ありません。再度打ち直して質問します。
No.1
- 回答日時:
こんにちは
すみませんが、直接の回答ではありません。
ご質問の文章と提示のコードからでは、具体的に何をなさりたいのかさっぱりわかりません。
ご提示のコードは「ActiveSheet」に対する処理だけしか書いてないようですけれど、ActiveSheetはどうやって決まっているのでしょうか?
ボタンなどを押してVBAを起動しているのなら、そのボタンがあるシートでしょうけれど、そうでない場合は不確定なシート(=たまたまアクティブになっていたシート)の可能性もありますし・・・
決まっているのなら、いちいちシート名を判定しているのが不自然ですし、決まっていないのならなぜActiveSheetだけが対象なのか理解できません。
もしかすると、「4つのシートに値を転記したい」のでしょうか?
それなら、Workbooks("シート名") で直接指定する方が確実です。
(転記先のシートは必ず存在することが保証されているものと想像しますので)
ループ内を見ると、6~28行迄同じ値を転記しているように見受けられますけれど、本当にそれが目的なのでしょうか?
などなど・・・
不明点が多すぎて、なんともわかりかねる状態と言えます。
ブック名、シート名、セル位置を明示して、かつ、読んだ人に「なさりたいことが具体的にわかる」ように質問なさった方が、的確な回答がつくものと思いますよ。
つたない質問で申し訳ありません。回答ありがとうございます。毎日ActiveSheetのボタンをクリックして情報を入力し他部署にメールで送るということをしています。別ファイルの出勤簿から別シートに、日付で人数を集計してあり、その日付と、アクティブシートの日付の同一の行に転記するように考えました。月によって転記先セルが違うためシート名(X月)で条件分岐するのかと思いましたが、おっしゃるように全体がわかる資料をまとめて再度投稿するようにいたします。よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
エクセルVBA Ifでシート名が合...
-
VBAでオブジェクト変数にsetし...
-
XL:BeforeDoubleClickが動かない
-
Excel チェックボックスにチェ...
-
Excel VBA 複数行を数の分だけ...
-
エクセルのマクロでアクティブ...
-
VBA 別ブック(シート)の同...
-
VBAエクセルの非アクティブシー...
-
VBA 存在しないシートを選...
-
VBAで同じシート名のコピー時は...
-
vba 環境依存文字がListViewボ...
-
エクセル・マクロ シートの非...
-
複数シートに色付きセル(条件つ...
-
別のシートを参照して計算する方法
-
vbaエクセルマクロ RemoveDupli...
-
ユーザーフォームに入力したデ...
-
【VBA】シート名に特定文字が入...
-
excelのマクロで該当処理できな...
-
【VBA】色のついたシート名を取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
実行時エラー1004「Select メソ...
-
特定の文字を含むシートだけマ...
-
XL:BeforeDoubleClickが動かない
-
【ExcelVBA】全シートのセルの...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【Excel VBA】Worksheets().Act...
-
エクセルVBA Ifでシート名が合...
-
Excel チェックボックスにチェ...
-
シートが保護されている状態で...
-
Excel VBA リンク先をシート...
-
ブック名、シート名を他のモジ...
-
ExcelのVBAのマクロで他のシー...
-
同じ作業を複数のシートに実行...
-
エクセルのシート名変更で重複...
-
VBA 検索して一致したセル...
-
【VBA】色のついたシート名を取得
-
VBAで指定シート以外の選択
おすすめ情報