- ベストアンサー
Visual BasicでExcelを操作するには?
初めましてこんにちは。 質問なのですが、 ExcelのA列に値を順々に書き込んでいくんですが、 この時に値が1~5までの場合はAの画像、 6~10までの場合はBの画像、といったように 入力されていく値に対してVisual Basicのイメージコントロールに画像を表示するにはどうしたらいいでしょうか? | A | 1| 10|・・・Bの画像 2| 4|・・・Aの画像 3| 8|・・・Bの画像
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Dim wb As Excel.Workbook Dim ws As Excel.Worksheet Dim ea As Excel.Application Dim varValue As Variant Set wb = GetObject("C:\Test\Test.xls") Set ea = wb.Application Set ws = wb.Worksheets("Sheet1") '値の取得の例 varValue = ws.Cells(1, 1) 'A1 varValue = ws.Cells(2, 1) 'A2 varValue = ws.Cells(1, 2) 'B1 varValue = ws.Cells(2, 2) 'B2 '終了処理 Set ws = Nothing Set wb = Nothing Set ea = Nothing のような感じです。
その他の回答 (2)
こんなコードを作ってみました。 ご質問の要件を満たしているかどうかちょっと不安ですが... 前提: A1,A2,A3の各セルに対応する形でB1,B2,B3セルの位置に それぞれImage1,Image2,Image3の名前でImageコントロールを 配置しています。 コード: ' このイベントはセルの値が変わったときに発生します。 Private Sub Worksheet_Change(ByVal Target As Range) Dim X(10) As Image 'とりあえずImageオブジェクトの配列10個準備 ' 行に対応する形でImageコントロールを配列にセット Set X(1) = Image1 Set X(2) = Image2 Set X(3) = Image3 ' カラムが1、つまりA列かどうか検査 If Target.Column = 1 Then ' 対象セルの値を検査(1から5の場合) If 1 <= Cells(Target.Row, Target.Column).Value And _ Cells(Target.Row, Target.Column).Value <= 5 Then ' 用意した画像ファイルを、行数を配列の添え字としたImageオブジェクトに流し込む X(Target.Row).Picture = LoadPicture("D:\OKWeb_in_marmot\Pic_A.bmp") ' 対象セルの値を検査(6から10の場合) ElseIf 6 <= Cells(Target.Row, Target.Column).Value And _ Cells(Target.Row, Target.Column).Value <= 10 Then X(Target.Row).Picture = LoadPicture("D:\OKWeb_in_marmot\Pic_B.bmp") End If End If End Sub あらかじめ必要個数分の配列を用意し、オブジェクトを一つ一つセットしなくては ならないので、プログラミング的にはとっても融通性の無いダメダメコードですが、 とりあえずの参考にしてみてください。
お礼
chipmoguraさん、お返事ありがとうございます。 詳しく解説までしていただきとても参考になりました。 ありがとうございます。
- tsukasa-12r
- ベストアンサー率65% (358/549)
GetObject を使用しましょう。 GetObject に関して詳しいことはヘルプを参照してください。 GetObject で取得した WorkBook オブジェクトや WorkSheet については、Excel の VBA のヘルプを参照するとよいでしょう。 イメージコントロールに画像を表示するあたりは問題ないですよね?
お礼
すみません、間違えて補足の方に書き込んでしまいました。
補足
tsukasa-12rさん、お返事ありがとうございます。 すみません、その辺のこともよく分からないので ご迷惑でなければ、ご教授願えませんでしょうか?
お礼
tsukasa-12rさん返信ありがとうございます。 お礼が遅れてすみません、大変参考になりました。 なんとか解決できそうです、ありがとうございました。