jcctaira の回答履歴

全261件中81~100件表示
  • excel vbaの修正でアドバイスお願いします

    excel2000を利用しています。 下記のとあるプロシージャで自分で修正を試みるもどうしても出来ず投稿させていただきました。 どうか修正内容のアドバイスをお願いします。 ■やろうとしていること 下記は写真を表示させる部分のコードです。下記 「worksheetchange」 イベントプロシージャで、レコードが変わると下記「myLoadPicture」が発生し、写真を表示させて、レコードを切り替えるたびに、その写真を切り替えるというものです。 ■相談したいこと いま指定したセルが空白だと、"NoImage.jpg"が表示されるようになっていますが、指定したフォルダに一致するファイルがなかった場合も、"NoImage.jpg"が表示されるようにしたいのですが、修正方法がわかりません。 どうかご教授お願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim fRange As Range Dim touroku As Long Select Case Target.Address Case "$BC$1" Call hyouji Case "$BW$1" myLoadPicture "board_Image", Target.Text, Range("BH3") Case "$CY$1" myLoadPicture "circuit_Image", Target.Text, Range("CJ3") Case Else Exit Sub End Select End Sub Private Sub myLoadPicture(folderName As String, fname As String, targetRange As Range) On Error Resume Next Dim pict As Shape, picPath As String picPath = ThisWorkbook.Path & "\" & folderName & "\" & fname If fname = "" 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 Exit Sub End Sub

  • テキストボックスの書式について

    例えばセルA1の書式が、分類:日付、種類:3月14日とします。(数字は半角) この場合、セルA1に03(全角)月14(半角)日と入力しても、3月14日(数字はすべて半角)と表示されます。 マクロを作成しているのですが、セルA1とテキストボックスの書式がどうしてもうまくいきません。 セルA1はUserform1内のTextbox1の値を取得します。 しかし、Textbox1の値をセルA1へ表示させると、セルA1と同じ書式に表示されません。 テキストボックスの値は文字列として扱われているようです。 Textbox1に03(全角)月14(半角)日と入力しても、3月14日(数字はすべて半角)と表示される方法はありませんか?

  • エクセル マクロ一覧

    開いているブックにあるマクロの一覧を作れないものでしょうか? モジュール、シート、ユーザーフォーム内にあるマクロすべてです。 VBAのチェックシートとして使いたいのですが エクセルバージョンは2003です

  • エクセル マクロ一覧

    開いているブックにあるマクロの一覧を作れないものでしょうか? モジュール、シート、ユーザーフォーム内にあるマクロすべてです。 VBAのチェックシートとして使いたいのですが エクセルバージョンは2003です

  • エクセルVBPでテキストボックスを時間差で表示

    算数のフラッシュ教材をVBPで作ろうと思っています。 A+B=Cの A,Bを乱数発生させて、TextBox1とTextBox2に表示させて、 数秒後に答えであるCをTextBox3に表示させたいのです。そこで、 TextBox3.Visible = False TextBox1.Text = a TextBox2.Text = b Application.Wait Time:=Now + TimeValue("00:00:2") '---2秒間停止 TextBox3.Text = c TextBox3.Visible = true のようにやるのですが、すべてのテキストボックスが同時に表示されて、時間差表示に ならないのです。どなたか、よろしくお願いします。

  • Excelで該当の画像ファイル張り付るVBAは?

    Excelで雛形のシートを複製して名前を変更し、該当する画像を指定したセルに張り付けるVBAを教えて頂けないでしょうか? 「現場写真」というフォルダ内に、下記の画像が入っています。 ・ 現場写真13-1.jpg ・ 現場写真13-2.jpg ・ 現場写真14-1.jpg ・ 現場写真14-2.jpg ・ 現場写真15-1.jpg ・ 現場写真15-2.jpg ・ 現場写真15-3.jpg 雛形のエクセルシートに「現場写真」というシートがあり、そのシートを複製し、シート名を「現場写真13」、「現場写真14」、「現場写真15」に変えて該当の写真を張り付けたいのです。 (雛形のシートの複製が難しいなら、新規シートを作成して、名前を変えるのでもOKです。) 張り付ける場所は、一枚目をA1、二枚目をA46、三枚目をA91にしたいです。(一枚目以外は、前の画像から2行あいた位置に入ればOKです) アドバイスよろしくお願いします。

  • VBA HTML要素または文字の座標を取りたい

    VBAなんですが、 HTML要素または指定文字したの画面の座標を取得したいです。 ですが、全然みつけられずにいます!! IEやらDocumentやら検索してますが出てきません。 どなたかご存知の方、おしえてください。

  • Excelで該当の画像ファイル張り付るVBAは?

    Excelで雛形のシートを複製して名前を変更し、該当する画像を指定したセルに張り付けるVBAを教えて頂けないでしょうか? 「現場写真」というフォルダ内に、下記の画像が入っています。 ・ 現場写真13-1.jpg ・ 現場写真13-2.jpg ・ 現場写真14-1.jpg ・ 現場写真14-2.jpg ・ 現場写真15-1.jpg ・ 現場写真15-2.jpg ・ 現場写真15-3.jpg 雛形のエクセルシートに「現場写真」というシートがあり、そのシートを複製し、シート名を「現場写真13」、「現場写真14」、「現場写真15」に変えて該当の写真を張り付けたいのです。 (雛形のシートの複製が難しいなら、新規シートを作成して、名前を変えるのでもOKです。) 張り付ける場所は、一枚目をA1、二枚目をA46、三枚目をA91にしたいです。(一枚目以外は、前の画像から2行あいた位置に入ればOKです) アドバイスよろしくお願いします。

  • クエリ表示と、ADOで抽出したレコードセットが違う

    Accessで作ったクエリで表示されるデータと、VBAでSQLを組んでそのクエリから抽出したデータが異なるので困っています。 ちょっと言葉では説明しにくいので表で説明します。 元となるテーブル(t_test)がたとえば以下のようになっているとします。 t_test 顧客id  商品id 1      A-1 2      A-2 3      B-1 4      A-1 これを元に、以下のようなクエリ(q_test)を作ります。 q_test 顧客id  商品id  式1: IIf([商品id] Like "A*",1,0) 1      A-1    1 2      A-2    1 3      B-1    0 4      A-1    1 VBAで以下のようなSQLを実行すると、なぜか式1の値が全て0となります。 sql = "SELECT * FROM q_test" 1      A-1    0 2      A-2    0 3      B-1    0 4      A-1    0 式1でLIKEを使っていることが原因なのか、 IIf([商品id] = "A-1",1,0) とかだと、クエリとSQLの結果に違いはありません。 IIfだけでなくSwitchを使った場合も同様(LIKEだとおかしい、=だと平気)でした。 ちなみに、Accessのバージョンは2003、VBAで使っているレコードセットはADODBです。 (今確認したところ、DAOでは問題なくできました。) 冒頭で、困っていると書きましたが、これを回避する方法はいくつか思いついていますので、 別の方法を教えていただきたいわけではなく、単純になぜこのようなことが起きるのかが知りたいです。 是非よろしくお願いします。

  • VBAを使って複数のシートから抽出する方法

    エクセルのシート2~シート20は患者さんに関するデータが入っています。 これらのシートは3行目に患者さんのコードが入っていて、 1行目に部屋番号、2行目に氏名、 4行目~1366行目まで処方された薬や検温の数値などのデータが入っており 一列ずつが患者さん一人分の情報になっています。 シート一つで200人~250人ほどの患者さんのデータになってます。 シート1の、D1~IV1(D3~IV3でもいいです!)に患者さんのコードを入れたら、 患者さんコードが一致するシート2~シート20の患者さんのデータを シート1に自動で持ってくるようにする事は可能でしょうか? 患者さんのコードは重複していません。 どうかお知恵をお貸しください

  • マクロ 検索できなかった検索値を表示したい

    C列を複数の検索値で検索して見つからなかった検索値が 一つでもあればその検索値をメッセージBOXに表示した上で どの検索値であっても同じ処理をしたいです。 全て検索できた場合は別の処理をしたいです。 今自力で出来るのは以下の記述ですが 同じ処理を6回も記述しておりメンテしにくいです。 また、記述順で最初に見つからなかった検索値だけしか 表示できない(それでも問題は無いです)という弱点もあります。 他に方法はありますでしょうか? 配列関連は自力で作成出来ませんので他の方法にてアドバイスを いただけたらと思います。 C列には果物名がランダムに10,000行入力されています。 検索値を ・みかん ・りんご ・バナナ ・いちご ・すいか ・メロン としてそれらが全て存在するか検索し一つでも存在しない場合は その検索値をメッセージBOXに表示した上で どの検索値であっても同じ処理を行う。 全て検索できた場合は次の処理を行う。 Sub 実験2() Dim 範囲 Set 範囲 = ThisWorkbook.Worksheets("マスタ").Columns("C:C") Set rngFind = 範囲.Find("みかん") If rngFind Is Nothing Then MsgBox "ファイル【みかん】が取込まれていません。", vbExclamation, "【警告】" MsgBox "今までの作業を保存しないで" & vbCrLf & _ "プログラムを終了します", vbExclamation, "終了" MsgBox "ただし【マスタ】はすでに削除されています。 " & vbCrLf & _ "必ず【マスタ更新】をやり直してください。", _ vbExclamation, "注意してください" ThisWorkbook.Sheets("マスタ").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select ThisWorkbook.Sheets("メニュー").Select Range("A2").Select End '終了 End If Set rngFind = 範囲.Find("りんご") If rngFind Is Nothing Then MsgBox "ファイル【りんご】が取込まれていません。", vbExclamation, "【警告】" MsgBox "今までの作業を保存しないで" & vbCrLf & _ "プログラムを終了します", vbExclamation, "終了" MsgBox "ただし【マスタ】はすでに削除されています。 " & vbCrLf & _ "必ず【マスタ更新】をやり直してください。", _ vbExclamation, "注意してください" ThisWorkbook.Sheets("マスタ").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select ThisWorkbook.Sheets("メニュー").Select Range("A2").Select End '終了 End If Set rngFind = 範囲.Find("バナナ") If rngFind Is Nothing Then MsgBox "ファイル【バナナ】が取込まれていません。", vbExclamation, "【警告】" MsgBox "今までの作業を保存しないで" & vbCrLf & _ "プログラムを終了します", vbExclamation, "終了" MsgBox "ただし【マスタ】はすでに削除されています。 " & vbCrLf & _ "必ず【マスタ更新】をやり直してください。", _ vbExclamation, "注意してください" ThisWorkbook.Sheets("マスタ").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select ThisWorkbook.Sheets("メニュー").Select Range("A2").Select End '終了 End If Set rngFind = 範囲.Find("いちご") If rngFind Is Nothing Then MsgBox "ファイル【いちご】が取込まれていません。", vbExclamation, "【警告】" MsgBox "今までの作業を保存しないで" & vbCrLf & _ "プログラムを終了します", vbExclamation, "終了" MsgBox "ただし【マスタ】はすでに削除されています。 " & vbCrLf & _ "必ず【マスタ更新】をやり直してください。", _ vbExclamation, "注意してください" ThisWorkbook.Sheets("マスタ").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select ThisWorkbook.Sheets("メニュー").Select Range("A2").Select End '終了 End If Set rngFind = 範囲.Find("すいか") If rngFind Is Nothing Then MsgBox "ファイル【すいか】が取込まれていません。", vbExclamation, "【警告】" MsgBox "今までの作業を保存しないで" & vbCrLf & _ "プログラムを終了します", vbExclamation, "終了" MsgBox "ただし【マスタ】はすでに削除されています。 " & vbCrLf & _ "必ず【マスタ更新】をやり直してください。", _ vbExclamation, "注意してください" ThisWorkbook.Sheets("マスタ").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select ThisWorkbook.Sheets("メニュー").Select Range("A2").Select End '終了 End If Set rngFind = 範囲.Find("メロン") If rngFind Is Nothing Then MsgBox "ファイル【メロン】が取込まれていません。", vbExclamation, "【警告】" MsgBox "今までの作業を保存しないで" & vbCrLf & _ "プログラムを終了します", vbExclamation, "終了" MsgBox "ただし【マスタ】はすでに削除されています。 " & vbCrLf & _ "必ず【マスタ更新】をやり直してください。", _ vbExclamation, "注意してください" ThisWorkbook.Sheets("マスタ").Select Cells.Select 'Sheets Selection.Delete Shift:=xlUp Range("A1").Select ThisWorkbook.Sheets("メニュー").Select Range("A2").Select End '終了 End If 次の処理 End Sub

  • エクセルのシート名変更で重複した時のvbaの処理

    こんにちは。vba初心者です。 セルのA1を参照してシート名を変更するとき 名前が重複したら、A1に入力されている文字列の後に(2)とつけたいのですが、 その重複したときの処理ができません。 シート名を変更するところまではできました。 以下のvbaです。 Sub test() Dim aSheet As Worksheet For Each aSheet In Worksheets aSheet.Select aSheet.Name = Range("A1") On Error Resume Next Next aSheet End Sub これに付け加えるか全然違ってもかまいません。 何かよい方法を教えてください。 説明が不十分かもしれませんが、よろしくお願いします。

  • excel vba のエラー原因が分かりません

    データ入力シート「Hit Data] データ表示シート「User Sheet」 とあります。 データ表示シート「User Sheet」に「次へ」「前へ」「最初へ」「最後へ」とボタンをつくり、データ入力シート「Hit Data]から、都度データを呼び出せるようにするプログラムをとあるサイトを参考にして作成しましたが、エラーが出てしまいどうしてもうまくいきません。 どこに問題があるのか見ていただけないでしょうか? '以下標準モジュールのプログラムです Public trg As Range Sub Saisyo()  Set trg = Worksheets("Hit Data").Range("A3")  Call Tenki End Sub Sub Saigo()  Set trg = Worksheets("Hit Data").Range("A60000").End(xlUp)  Call Tenki End Sub Sub Mae()  If trg.Row >= 4 Then   Set trg = trg.Offset(-1, 0)   Call Tenki  Else   MsgBox "これより前のレコードはありません"  End If End Sub Sub Tsugi()  If trg.Row < Worksheets("Hit Data").Range("A60000").End(xlUp).Row Then   Set trg = trg.Offset(1, 0)   Call Tenki  Else   MsgBox "これより後ろのレコードはありません"  End If End Sub Sub Tenki()  Worksheets("User Sheet").Range("D9").Value = trg.Offset(0, 0)  Worksheets("User Sheet").Range("D10").Value = trg.Offset(0, 1)  Worksheets("User Sheet").Range("D11").Value = trg.Offset(0, 2)  Worksheets("User Sheet").Range("D12").Value = trg.Offset(0, 3) End Sub '以下 User Sheet"のシートモジュールに記載されたプログラムです。 Private Sub Worksheet_Activate() Call Saisyo End Sub '表示されるエラーの内容 'saisyo・・・アプリケーション定義またはオブジェクト定義のエラーです。 'saigo・・・同上 'mae・・・オブジェクト変数またはWithブロック変数が設定されていません 'tugi・・・同上

  • EXCEL2010 VBA 繰り返し処理

    EXCEL2010でVBAを使用してシートを作成しています。 シート1のA1にヘッダ数・A2に項目数を入力します。 VBAのコードを実行するとA1のヘッダ数が1ならシート2のA列には何も表示せず A2の項目数の分だけB列の14行目から数字を入力していきます。 (例)シート1   A1:1   A2:20  の場合はシート2のB14から20行下まで1~20の値を自動入力させる。   シート2   B14:1   B15:2     ↓   B33:20 シート1のA1が2以上の場合はシート2のA14から、シート1のA2の数値分アルファベットを表示させていきます。 (例)シート1   A1:2   A2:10  の場合シート2のA14:A23に「A」を表示させます。(シート1のA2の数分この場合は10行ずつ)               A24:A33に「B」を表示させます。               B列にはアルファベットごとに数字を1~表示させます。   B14:B23 1~10   B24:B33  1~10 シート1のA1が2なのでA・Bを表示 A1が3だとA・B・C A1が10だとA・B・C・D・E・F・G・H・I・JがA2の数字で区切りながら表示される。 このようなコードを書きたいのですが、どなたかご教示お願いします。

  • excel vba のエラー原因が分かりません

    データ入力シート「Hit Data] データ表示シート「User Sheet」 とあります。 データ表示シート「User Sheet」に「次へ」「前へ」「最初へ」「最後へ」とボタンをつくり、データ入力シート「Hit Data]から、都度データを呼び出せるようにするプログラムをとあるサイトを参考にして作成しましたが、エラーが出てしまいどうしてもうまくいきません。 どこに問題があるのか見ていただけないでしょうか? '以下標準モジュールのプログラムです Public trg As Range Sub Saisyo()  Set trg = Worksheets("Hit Data").Range("A3")  Call Tenki End Sub Sub Saigo()  Set trg = Worksheets("Hit Data").Range("A60000").End(xlUp)  Call Tenki End Sub Sub Mae()  If trg.Row >= 4 Then   Set trg = trg.Offset(-1, 0)   Call Tenki  Else   MsgBox "これより前のレコードはありません"  End If End Sub Sub Tsugi()  If trg.Row < Worksheets("Hit Data").Range("A60000").End(xlUp).Row Then   Set trg = trg.Offset(1, 0)   Call Tenki  Else   MsgBox "これより後ろのレコードはありません"  End If End Sub Sub Tenki()  Worksheets("User Sheet").Range("D9").Value = trg.Offset(0, 0)  Worksheets("User Sheet").Range("D10").Value = trg.Offset(0, 1)  Worksheets("User Sheet").Range("D11").Value = trg.Offset(0, 2)  Worksheets("User Sheet").Range("D12").Value = trg.Offset(0, 3) End Sub '以下 User Sheet"のシートモジュールに記載されたプログラムです。 Private Sub Worksheet_Activate() Call Saisyo End Sub '表示されるエラーの内容 'saisyo・・・アプリケーション定義またはオブジェクト定義のエラーです。 'saigo・・・同上 'mae・・・オブジェクト変数またはWithブロック変数が設定されていません 'tugi・・・同上

  • エクセルでメタタグを抽出するには?

    すいません、前回質問した者です。 前回の質問では・・・ エクセルシートのB列にURLが並んでいるとして、VBAを使って、C列には「description」D列には「keywords」を抽出したいという質問をしたのですが、参考になる回答がなかったのでもう一度質問します。 以前、私が教えてもらったのは、B列にURLが並んでいて、A列にタイトルを抽出させたものでした。 それが以下になります。 Public Sub ReadTitle() Dim url As Range Dim Http, buf As String Set Http = CreateObject("MSXML2.XMLHTTP") Set url = Range("B1") Do While (url.Value <> "") Http.Open "GET", url.Value, False Http.Send buf = StrConv(Http.ResponseBody, vbUnicode) 'msgbox buf url.Offset(0, -1).Value = getTitle(buf) Set url = url.Offset(1, 0) Loop Set Http = Nothing End Sub Private Function getTitle(buf As String) As String Dim pos1 As Long, pos2 As Long pos1 = InStr(1, buf, "<title>") If pos1 = 0 Then pos1 = InStr(1, buf, "<TITLE>") If pos1 = 0 Then getTitle = "" Exit Function Else pos2 = InStr(pos1 + 7, buf, "</TITLE>") End If Else pos2 = InStr(pos1 + 7, buf, "</title>") End If getTitle = Mid(buf, pos1 + 7, pos2 - pos1 - 7) End Function このような感じでB列にはURLの一覧があるとして、A列にタイトル、C列にdescription D列にkeywordsが抽出できればいいなと考えています。 ちなみに、私にはVBAの知識がまったくありません。とりあず、これだけ出来れば、すごく助かるのですが、どなたか教えていただけないでしょうか?  よろしくお願いします!

  • エクセルVBAの条件指定が上手くいきません

    「7を超えたら、For Eachステートメントを抜けなさい」という条件を入れたいのですが、 7を超えても処理が継続し困っています。 勉強不足で申し訳ないですが、ご教授願います。 【やりたいこと】 まず、セルB1~D3までのセルの値(9つ)が、7を超えない条件で1を加算していきます。 加算したときの値はE~Gの列に貼り付けていきます。 7を超えた時点でFor Eachステートメントを抜けます。 また、B1~D3までのセルには計算式が入っており、A1に数字を入れると、 それぞれ異なる増え方をします。(計算式自体は$A$1+1.1、$A$1+2.1などシンプルなもの) Sub test() Dim i As Range Dim n As Long Dim x As Long n = 1 x = 1 For Each i In Range("B1:D3") Range("A1").Value = x If i < 7 Then Range("B1:D3").Copy Cells(n, 5).Select Selection.PasteSpecial Paste:=xlPasteValues n = n + 3 x = x + 1 ElseIf i > 7 Then Exit For End If Next End Sub お手数ですが、宜しくお願いいたします。

  • VBA 複数のBOOKの連続操作

    いつもお世話になっております。 複数のブックの更新操作についてわからないことがあります。 複数のブックには項目別のWEBクエリが設定されており、 更新の際にはその都度ブックを開いた上更新しています。 BOOKは4つあり、 BOOK1のコマンドボタンからBOOK2~BOOK4までの更新を実行したいと思っています。 下記のように作ってみたのですが、 BOOK2を更新して閉じた後、BOOK3への処理はスルーされています。 エラーが出るわけではないのですが・・・ 素人のため、説明も要所を得ていませんが、 どうかお力を貸していただけないでしょうか? 下記 BOOK1のマクロ Private Sub CommandButton9_Click() 'ブック2を開いてWEBクエリ更新 Workbooks.Open Filename:="D:\TestBook\test.xlsm" WBN = ActiveWorkbook.Name Application.Run "'" & WBN & "'!Module3.更新して閉じる" 'ブック3を開いてWEBクエリ更新 Workbooks.Open Filename:="D:\TestBook\test2.xlsm" WBN = ActiveWorkbook.Name Application.Run "'" & WBN & "'!Module3.更新して閉じる" End Sub BOOK2~BOOK4 Module3 Sub a1() ' エラーメッセージを表示する(On Errorステートメント) On Error GoTo Err '-------------------------------------------------------- 'webクエリ更新 Range("B6").Select Selection.QueryTable.Refresh BackgroundQuery:=False ’中略 'エラーならブックを上書き保存して閉じます Err: Sheets("sheet1").Select Range("C2").Select Selection.ClearContents Range("P3").Select If ThisWorkbook.Saved = False Then ThisWorkbook.Save End If ActiveWorkbook.Close End Sub 宜しくお願いいたします。

  • VBA 複数のBOOKの連続操作

    いつもお世話になっております。 複数のブックの更新操作についてわからないことがあります。 複数のブックには項目別のWEBクエリが設定されており、 更新の際にはその都度ブックを開いた上更新しています。 BOOKは4つあり、 BOOK1のコマンドボタンからBOOK2~BOOK4までの更新を実行したいと思っています。 下記のように作ってみたのですが、 BOOK2を更新して閉じた後、BOOK3への処理はスルーされています。 エラーが出るわけではないのですが・・・ 素人のため、説明も要所を得ていませんが、 どうかお力を貸していただけないでしょうか? 下記 BOOK1のマクロ Private Sub CommandButton9_Click() 'ブック2を開いてWEBクエリ更新 Workbooks.Open Filename:="D:\TestBook\test.xlsm" WBN = ActiveWorkbook.Name Application.Run "'" & WBN & "'!Module3.更新して閉じる" 'ブック3を開いてWEBクエリ更新 Workbooks.Open Filename:="D:\TestBook\test2.xlsm" WBN = ActiveWorkbook.Name Application.Run "'" & WBN & "'!Module3.更新して閉じる" End Sub BOOK2~BOOK4 Module3 Sub a1() ' エラーメッセージを表示する(On Errorステートメント) On Error GoTo Err '-------------------------------------------------------- 'webクエリ更新 Range("B6").Select Selection.QueryTable.Refresh BackgroundQuery:=False ’中略 'エラーならブックを上書き保存して閉じます Err: Sheets("sheet1").Select Range("C2").Select Selection.ClearContents Range("P3").Select If ThisWorkbook.Saved = False Then ThisWorkbook.Save End If ActiveWorkbook.Close End Sub 宜しくお願いいたします。

  • VBAで同じ作業を2回繰り返す場合のコード

    下記コードで具体的アドバイスを頂ければと思います。よろしくお願いいたします。 ■やりたいこと EXCELのシートに、2種類の写真表示スペースを作って、そのそばでそれぞれファイル名を入力して、そのファイル名を変えるごとに、それぞれのjpegファイルを表示させたい。 ■質問 下記コードで、ふたつめの変数を変えればよいことは、分かるのですが、どこをどのようにして、変数を変えればいいかわかりません。ご教授お願いします。 ■私の作っているコード とあるサイトを参考にして、下記作成いたしました。 'ひとつめ写真表示 Private Sub Worksheet_Change(ByVal Target As Range) Dim fName As String, pict As Shape If Target.Address <> "$H$25" Then Exit Sub fName = ThisWorkbook.Path & "\board_Image\" & Target.Offset(0, 0).Text If Dir(fName) = "" Then fName = ThisWorkbook.Path & "\board_Image\NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = "$C$26" Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ .Range("k6").Left, .Range("C26").Top, 260, 320) End With End Sub ----------------------------------------------------------------------------- 'ふたつめ写真表示 Private Sub Worksheet_Change(ByVal Target As Range) Dim fName As String, pict As Shape If Target.Address <> "$AT$4" Then Exit Sub fName = ThisWorkbook.Path & "\map_Image\" & Target.Offset(0, 0).Text If Dir(fName) = "" Then fName = ThisWorkbook.Path & "\map_Image\NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = "$k$6" Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ .Range("k6").Left, .Range("k6").Top, 260, 320) End With End Sub