エクセル、マクロ初心者です。
お手柔らかにお願い致します。
作成しようとしているマクロが基礎勉強中の私だと難易度が高いらしく、
何度も質問させて頂いております。申し訳ございません。
{現状}
・毎月行うリストの作成をマクロで行えるように試行錯誤中です。
{実行したい操作}
・B列C列のセルの入力内容によってA列の"担当者名"を自動入力したいと考えております。
・画像にございます、B列の"曜日"とC列の"数字"の組み合わせによって計10人前後の担当者名を使い分け入力判断ができるマクロを作成したいです。
{例}
齋藤 = 火 + 2
伊藤 = 火 + 3
これも齋藤 = 水 + 2
加藤 = 水 + 3
※余談ですが、数字の方は語尾に"号"がつきます。
検索のヒントやサンプルコード、解説など頂けると幸いです。
ちなみに、私はIF~Thenでできるのかな...と過信しています。
ご教授、お願い致します。
No.3ベストアンサー
- 回答日時:
前回、登録したマクロは全て削除してください。
(削除しないと誤動作します)以下のマクロを標準モジュールへ登録してください。
-----------------------------------------------------
Option Explicit
Dim row1max As Long
Dim sh1 As Worksheet
Public Sub 担当者設定()
Dim row As Long
Dim rowMax As Long
Dim sh2 As Worksheet
Set sh1 = Worksheets("担当者マスター") 'シート名変更時、この箇所を変える
Set sh2 = Worksheets("Sheet1") 'シート名変更時、この箇所を変える
row1max = sh1.Cells(Rows.Count, 1).End(xlUp).row
rowMax = sh2.Cells(Rows.Count, 2).End(xlUp).row
For row = 2 To rowMax
sh2.Cells(row, 1).Value = GetMemberName(sh2.Cells(row, 2).Value, sh2.Cells(row, 3).Value)
Next
MsgBox ("処理完了")
End Sub
Private Function GetMemberName(ByVal week As String, ByVal number As Long)
Dim row1 As Long
GetMemberName = ""
For row1 = 2 To row1max
If sh1.Cells(row1, 2).Value = week And sh1.Cells(row1, 3).Value = number Then
GetMemberName = sh1.Cells(row1, 1).Value
Exit Function
End If
Next
End Function
---------------------------------------------------------
Sheet1の曜日、号車で担当者マスターを検索し、該当担当者をsheet1の担当者に設定します。
該当担当者が見つからない場合、空白を設定します。その場合は、曜日、号車に誤りがないか
ご確認をお願いいたします。
尚、Sheet1の名称を変える場合は、
Set sh2 = Worksheets("Sheet1") 'シート名変更時、この箇所を変える
の箇所を変えてください。(変える方法は担当者マスターと同じです)
Sheet1の行数が1000行以内であれば、問題ありませんが、
大幅に多い場合は、問題になるかもしれません。その場合は、補足してください。
お返事、遅れてしまい申し訳ございませんでした。
実装してみたところ、「実行時エラー '13': 型が一致しません」のエラーが
sh2.Cells(row, 1).Value = GetMemberName(sh2.Cells(row, 2).Value, sh2.Cells(row, 3).Value)の行で出てしまい止まってしまいました。
マンツーマン形式で相談に乗ってもらってしまい本当に申し訳ないので、一度質問を分けようと思います。
よろしければ、次回の質問でも回答頂けたらと思います。
本当にありがとうございました。
No.2
- 回答日時:
No1です。
>このリストはあるソフトからCSVで書き出したもので、既に存在するものを削除したり並び替えたりして作成しているものでして、Sheet1であるリストのメインとなる箇所には既に曜日と号車が全て記載されていることになってしまうんです。
ということは、Sheet1には、曜日と号車は既に記載されているので、その状態で、マクロを呼び出したときに、
A列へ該当担当者を一気に設定したいということでしょうか。
>A列へ該当担当者を一気に設定したいということでしょうか。
はい、マクロ実行後、担当者が一気に入力されるととても助かります。
真摯に対応して頂き、本当にありがとうございます。
No.1
- 回答日時:
別途、別のシート(担当者マスターとします)に、担当者と曜日、号車の組み合わせを作成しておきます。
(添付の図を参照)
今回、入力をしているシートに以下のマクロを記述します。(標準モジュールではありません)
------------------------------------------------------
Option Explicit
Private Sub Worksheet_Change(ByVal target As Range)
'MsgBox (target.Count & ":" & target.row & ":" & target.Column)
If target.Count > 1 Then Exit Sub
If target.row = 1 Then Exit Sub
If target.Column <> 2 And target.Column <> 3 Then Exit Sub
Application.EnableEvents = False
Call MyChange(target)
Application.EnableEvents = True
End Sub
Private Sub MyChange(ByVal target As Range)
Dim row As Long
Dim row1max As Long
Dim row1 As Long
Dim sh1 As Worksheet
row = target.row
If Cells(row, 2).Value = "" Then
Cells(row, 1).Value = ""
Exit Sub
End If
If Cells(row, 3).Value = "" Then
Cells(row, 1).Value = ""
Exit Sub
End If
Set sh1 = Worksheets("担当者マスター") 'シート名変更時、この箇所を変える
row1max = sh1.Cells(Rows.Count, 1).End(xlUp).row
For row1 = 2 To row1max
If sh1.Cells(row1, 2).Value = Cells(row, 2).Value And sh1.Cells(row1, 3).Value = Cells(row, 3).Value Then
Cells(row, 1).Value = sh1.Cells(row1, 1).Value
Exit Sub
End If
Next
MsgBox ("該当者なし")
End Sub
--------------------------------------------------------------
曜日(B列)と号車(C列)が入力されたとき、担当者マスターから、該当する担当者を検索して、
A列に表示します。
尚、”担当者マスター”の名称は、あなたのほうで好きな名前に変えても、問題ありませんが、
例えば、シート名を○○にした場合は、マクロ中の
Set sh1 = Worksheets("担当者マスター") 'シート名変更時、この箇所を変える
の"担当者マスター"を○○に変えてください。
担当者マスターも
A列:担当者
B列:曜日
C列:号車
となっています。
早急にコメントして頂きありがとうございました、大変勉強になりました。
しかし、私の説明不足のせいで少し問題が発生してしまいました。
このリストはあるソフトからCSVで書き出したもので、既に存在するものを削除したり並び替えたりして作成しているものでして、Sheet1であるリストのメインとなる箇所には既に曜日と号車が全て記載されていることになってしまうんです。
担当者と曜日、号車の組み合わせを作成しておきます。←こちらも月末に毎回書き出しを行っているデータでリストを作成しているので、エクセルの別データに保存しておけば、そこまで問題ではないのですが、前者だけ、できれば解決方法を教えて頂けたらと思います。お手数お掛けして申し訳ございません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- Visual Basic(VBA) 【マクロ】表への繰り返し転記について 1 2022/11/19 16:30
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) 【Excel】指定した文字列に該当する行を重複しないようにリスト 3 2022/03/30 12:27
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Excel(エクセル) 指定値をマクロで検索&シート移動 2 2022/04/27 23:29
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) ExcelのVBAコードについて教えてください。 1 2022/06/20 09:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】VLOOKUPにて参照元に...
-
エクセルの最終ページだけを自...
-
Caps Lockキーの解除
-
リース初心者です 利子率の計...
-
エクセル関数で {=TABLE(,セル...
-
Excelでカーソルが逆に動く
-
60進法で複数セルの足し算、引...
-
プルダウンで選択すると隣のセ...
-
Excel2010の並べ替えで行の高さ...
-
Excelの空白行を上に詰めるVBA...
-
エクセルで離れたセルを離れた...
-
エクセルで複数の勤務時間ごと...
-
エクセルで複雑な表の作り方
-
エクセルデータを拡大/縮小して...
-
エクセルで月を数える方法
-
至急! Excelで歩合計算
-
エクセルシートを重ねることは...
-
エクセルの行高さが、挿入作業...
-
エクセルの関数について
-
今日の日付が第n曜日かを求める
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルに入力後、別のシート...
-
ExcelのVBAでvlookupの使い方を...
-
エクセルの最終ページだけを自...
-
EXCEL VBA データを抽出して別...
-
エクセルデータから必要な情報...
-
Caps Lockキーの解除
-
Excel2010の並べ替えで行の高さ...
-
エクセル関数で {=TABLE(,セル...
-
リース初心者です 利子率の計...
-
Excelでカーソルが逆に動く
-
エクセルで離れたセルを離れた...
-
プルダウンで選択すると隣のセ...
-
エクセルで複数の勤務時間ごと...
-
VBA 条件が一致した場合の...
-
エクセルで作った書類に、パン...
-
60進法で複数セルの足し算、引...
-
shiftキーのロック解除をしたい...
-
Java、配列の問題を教えて欲し...
-
今日の日付が第n曜日かを求める
-
至急! Excelで歩合計算
おすすめ情報