アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA超初心者です。月ごとの日報シートの出勤者数を別ファイルから転記する内容です。
シートにより転記先セルが異なるため、コメント化の部分をElse IF で、アクティブシート名で条件分岐したいです。並べ替えたり、調べてやってみたのですがどうもうまくいかず困っています。
For i =6 To 28 はどちらの条件でも同じで、営業日になっています。易しく教えていただけるとありがたいです。よろしくお願いいたします。

「エクセルVBA Ifでシート名が合致した」の質問画像

A 回答 (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

ループは分けていますが、、参考程度で
    • good
    • 0
この回答へのお礼

見づらい資料を細かく見ていただき感謝いたします。今日勤務先で修正したところやりたいことがすんなり実行できました。
IfとForの組み合わせ方、Elseで<それ以外のシート名>の指定は不要なこと、コピーして値貼り付けではなくValueでできること、Resizeという記述方法等大変勉強になりました。また機会がありましたら、よろしくお願いいたします。ありがとうございました。

お礼日時:2021/10/07 18:16

こんにちは


なさりたい事とコードを拝見すると
先ず直すべき点があるように思います。

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は開いた(休暇予定表)ブックです。

コードはコピペがうれしいな、、、読みにくいのと、手書きするの面倒に感じる方少なくないと思いますよ
    • good
    • 0
この回答へのお礼

回答ありがとうございます。職場で使用していてコードが送れず、画像にしましたが、わかりづらくて申し訳ありません。再度打ち直して質問します。

お礼日時:2021/10/06 16:49

こんにちは



すみませんが、直接の回答ではありません。
ご質問の文章と提示のコードからでは、具体的に何をなさりたいのかさっぱりわかりません。

ご提示のコードは「ActiveSheet」に対する処理だけしか書いてないようですけれど、ActiveSheetはどうやって決まっているのでしょうか?
ボタンなどを押してVBAを起動しているのなら、そのボタンがあるシートでしょうけれど、そうでない場合は不確定なシート(=たまたまアクティブになっていたシート)の可能性もありますし・・・
決まっているのなら、いちいちシート名を判定しているのが不自然ですし、決まっていないのならなぜActiveSheetだけが対象なのか理解できません。

もしかすると、「4つのシートに値を転記したい」のでしょうか?
それなら、Workbooks("シート名") で直接指定する方が確実です。
(転記先のシートは必ず存在することが保証されているものと想像しますので)

ループ内を見ると、6~28行迄同じ値を転記しているように見受けられますけれど、本当にそれが目的なのでしょうか?

などなど・・・
不明点が多すぎて、なんともわかりかねる状態と言えます。


ブック名、シート名、セル位置を明示して、かつ、読んだ人に「なさりたいことが具体的にわかる」ように質問なさった方が、的確な回答がつくものと思いますよ。
    • good
    • 0
この回答へのお礼

つたない質問で申し訳ありません。回答ありがとうございます。毎日ActiveSheetのボタンをクリックして情報を入力し他部署にメールで送るということをしています。別ファイルの出勤簿から別シートに、日付で人数を集計してあり、その日付と、アクティブシートの日付の同一の行に転記するように考えました。月によって転記先セルが違うためシート名(X月)で条件分岐するのかと思いましたが、おっしゃるように全体がわかる資料をまとめて再度投稿するようにいたします。よろしくお願いいたします。

お礼日時:2021/10/06 17:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A