質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1348閲覧

EXCEL vba 列への判定 shape(画像)を持つか

raaarta

総合スコア43

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/10/29 09:24

編集2021/10/29 09:29

特定の列に対して、セル中に画像が持つかの判定をvbaでさせたいです。
画像でいうBが判断対象列,Cが判断結果記入列。
vba前のシート
イメージ説明
B4,B7,B8セルは画像を持つので、C列に、それがわかるようにYをたてたいです。
vba後のシート
イメージ説明
すいません、以下自分で調べましたが、2つの要素(列への判断・走査 x shapeを持つセルか)をマッシュアップできませんでした!
皆様のお知恵をお貸し頂ければ幸いです。
特定の列に対してジャッジしていく、というのは以下を流用しようと思いました。
0000006 のセルかをサーチしています。
リンク内容

セルが画像を持つか、は以下を参考にしようと思いました。
リンク内容

objShape という概念とrangeがなんか、、照合させる方法が??でした。
何卒宜しくお願いします。

vba

1'以下ページより当画像向けに少々変更 2'https://it-skill-memo.work/2019/09/14/%E3%80%90vba%E3%80%91%E5%88%97%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6dictionary%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/#toc3 3'変数の宣言を必須 4Option Explicit 5 6Sub Sample() 7 8 Const TARGET_SHEET_NAME As String = "サンプルシート" 9 Const TARGET_COLUMN As Integer = 2 10 Const START_ROW As Integer = 2 11 12 Dim endRow As Double 13 Dim arrayData As Variant 14 Dim data As Variant 15 Dim dicDate As Object 16 17 '最終行を取得 18 endRow = Cells(START_ROW, TARGET_COLUMN).End(xlDown).Row 19 20 '1列分のデータを取得 21 With Worksheets(TARGET_SHEET_NAME) 22 arrayData = Range(.Cells(START_ROW, TARGET_COLUMN), _ 23  .Cells(endRow, TARGET_COLUMN)) 24 End With 25 26 'DictionaryのKeyに設定。Valueには空文字を設定 27 Set dicDate = CreateObject("Scripting.Dictionary") 28 For Each data In arrayData 29 If Not dicDate.Exists(data) Then 30 dicDate.Add data, "" 31 End If 32 Next 33 34 '今回ここらへんに0000006探しではなく、B列がshapeかの判定をさせたいです。 35 'そのためここをコメントアウト 36 '特定の値の存在確認 37 'If dicDate.Exists("0000006") Then 38 ' MsgBox "0000006が存在しました" 39 'End If 40 41End Sub 42コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんな感じでどうでしょうか。

VBA

1Sub Sample() 2 3 Const TARGET_SHEET_NAME As String = "サンプルシート" 4 Const TARGET_COLUMN As Integer = 2 5 6 Dim ws As Worksheet 7 Set ws = Worksheets(TARGET_SHEET_NAME) 8 Dim shp As Shape 9 For Each shp In ws.Shapes 10 If shp.TopLeftCell.Column = TARGET_COLUMN Then shp.TopLeftCell.Offset(, 1).Value = "Y" 11 Next 12 13End Sub 14

投稿2021/10/29 09:51

jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raaarta

2021/10/29 10:45

ばっちりでした。 シンプルですね。。 rangeは使わない。shapesを判断して該当するなら、そのoffset使って判定結果をいれる。 学びになりましたm(__)m
raaarta

2021/10/29 10:46

このQ御覧になる皆様、シンプルな素晴らしいコードを頂きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問