いつもお世話になっております。
初心者ですが、苦しみながらもexcelでデータベースを作成しております。
さて Worksheet_Change のイベントが2つあり、これを一つにまとめようとしているのですが、がんばっているんですが、自分ではどうしてもうまくいかない為、投稿させていただきました。
コードは下記2つです。
また、どういったものを作ろうとしているのか説明不足でご指摘を頂戴することもありますので、試作段階のファイルですが、アップローダーにあげさせていただきました。確認頂ければ幸いです。
■アプロダ 投稿No 4514
http://www.kent-web.com/pubc/book/test/uploader/ …
■作ろうとしているデータベースの概要
inputシート・・・データを直接入力して、また、データや写真を閲覧をするシート
dataシート・・・データを格納するシート、オートフィルタを使って、曖昧検索フィルタもここでかけたりします。
どうか良いお知恵を拝借させていただきたくよろしくお願いします。
'一つ目のプロシージャ(Noセルに数字が入ると、そのNoのデータを自動的にdataシートまで読みにいって表示させます)
Private Sub WorkSheet_Change(ByVal Target As Range)
'No入力してデータ反映
Dim fRange As Range
Dim fRow As Long
If Target.row <> 4 Then Exit Sub
If Target.Column <> 3 Then Exit Sub
Set fRange = Sheets("data").Columns(1).Find(What:=Range("C4").Value, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
If (fRange Is Nothing) Then '見つからなかった?
MsgBox "入力された顧客コードが存在しません。", vbExclamation
Exit Sub
End If
fRow = fRange.row '検索された顧客DCの行位置を求める
Range("F4").Value = Sheets("data").Cells(fRow, 2).Value
Range("C5").Value = Sheets("data").Cells(fRow, 3).Value
Range("C6").Value = Sheets("data").Cells(fRow, 4).Value
Range("C7").Value = Sheets("data").Cells(fRow, 5).Value
Range("F5").Value = Sheets("data").Cells(fRow, 6).Value
End Sub
'二つ目のプロシージャ(写真を表示させるためのコードです)
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$k$4"
myLoadPicture "board_Image", Target.Text, Range("I5")
Case "$K$17"
myLoadPicture "map_Image", Target.Text, Range("I18")
Case Else
Exit Sub
End Select
End Sub
No.2ベストアンサー
- 回答日時:
>片方の絵が出ない
その部分はあなたの元のご相談マクロから変えてないので,今回の修正は無関係です。つまり元々間違ってました。
間違い:
Case "$k$4"
正解:
Case "$K$4"
>エラー
そこも同じで元々間違ってた部分ですが,片方の絵は出ると言うことだと,シートに記入してあるデータなどに誤記があるんじゃないかと思います。
ファイル名やフォルダ名など,よく再確認してください。
エラーが出たときは,黄色くなった行の各部の内容を一つずつ漏れなくよくよくよく精査して,何が間違っているのかしっかり突き詰めてください。こういうのを「デバッグ」と言って,マクロを作成する時には必ず行わないとダメです。
たとえば
VBE画面でローカルウィンドウを出しておき,各変数の値をよくチェックします。
イミディエイトウィンドウで変数の値を調べたり,記載を変えたマクロを実行して動作を再確認します。
ご指導ありがとうございます。自分でちゃんと調べないといけないことなのに甘えてしまって反省しております。イミディエイトウィンドウを使って自分でも間違いが探せるように精進いたします。
色々とありがとうございました。
No.1
- 回答日時:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fRange As Range
Dim fRow As Long
Select Case Target.Address
case "$C$4"
Set fRange = Sheets("data").Columns(1).Find(What:=Range("C4").Value, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
If (fRange Is Nothing) Then '見つからなかった?
MsgBox "入力された顧客コードが存在しません。", vbExclamation
Exit Sub
End If
fRow = fRange.row '検索された顧客DCの行位置を求める
Range("F4").Value = Sheets("data").Cells(fRow, 2).Value
Range("C5").Value = Sheets("data").Cells(fRow, 3).Value
Range("C6").Value = Sheets("data").Cells(fRow, 4).Value
Range("C7").Value = Sheets("data").Cells(fRow, 5).Value
Range("F5").Value = Sheets("data").Cells(fRow, 6).Value
Case "$k$4"
myLoadPicture "board_Image", Target.Text, Range("I5")
Case "$K$17"
myLoadPicture "map_Image", Target.Text, Range("I18")
Case Else
Exit Sub
End Select
End Sub
でいいです。
迅速な回答助かります、ありがとうございました。
早速、ためさせて頂いたところ、
なぜか写真が一つだけ表示されて(map_Image)、もう一方の写真は表示されませんでした。
また、写真のディレクトリを指定するコードのset pictという部分でエラーが出るようになってしまいました。
これは今回の修正とは、何か関係がありそうでしょうか?もしあるようでしたら、またアドバイスを頂ければ幸いです。ついでの質問ですみません。
'以下 写真のディレクトリを指定するコードです
Private Sub myLoadPicture(folderName As String, fname As String, targetRange As Range)
Dim pict As Shape, picPath As String
picPath = ThisWorkbook.Path & "\" & folderName & "\" & fname
If Dir(picPath) = "" Then
picPath = ThisWorkbook.Path & "\" & folderName & "\" & "NoImage.jpg"
End If
With ActiveSheet
For Each pict In .Shapes
If pict.TopLeftCell.Address = targetRange.Address Then
pict.Delete
Exit For
End If
Next pict
Set pict = .Shapes.AddPicture(picPath, msoTrue, msoFalse, _
targetRange.Left, targetRange.Top, 260, 320)
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
Excelのセルを飛ばして入力する
-
Excelのオートフィル
-
別シートからの文字を変更
-
Excel 2019 のピボットテーブル...
-
エクセルの行の抽出について質...
-
【マクロ】エクセルにかいてあ...
-
スプレッドシート クエリ関数 1...
-
エクセルでセルに「氏名を入力...
-
MOS365 Excel Expert / Excel R...
-
excelの不要な行の削除ができな...
-
EXACT関数とIF関数の組み合わせ...
-
スプレッドシートの関数VLOOKUP...
-
Excelで全角を半角にしたいので...
-
Excel初心者です。 詳しい方、...
-
エクセルの数式で教えてください。
-
4つのパターンを表示するEXACT...
-
スマートな関数を教えて下さい。
-
【Excel】セル内の時間帯が特定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報