
画像にあるように
同じ行内に矢印線が複数本ありますが
それの最左端=開始日 最右端=終了日として日付を取得したいです。
例えば
8行目なら 矢印線が4日~5日 と 12日~14日に挿入されています。
その状態でマクロ起動すると
開始日:4日 終了日:14日 を取得できるようにしたいです。
開始日 終了日の取得範囲については指定し、(指定しないと永遠に探しに行くと思うので)
取得範囲内の矢印線がないところに関しては空欄のままパスできるようにしたいです。
ご教示お願いします。

No.6ベストアンサー
- 回答日時:
No5です
>アプリケーション定義またはオブジェクト定義のエラーです。
考えられるのは、s.TopLeftCellが取得できないケースがあるのかもということかと思いますが、よくわかりません。
シート上に他に存在するShapeで問題になりそうなものの有無を調べてみるのが速そうな気がします。
エラー発生時の対象shape(=s)が何であるかがわかれば、回避策も見えてくることでしょう。
あるいは、No3では緩くAutoShapeTypeで対象をチェックしていましたが、もっと限定してしまえば事前に回避が可能になると考えられます。
図形の挿入で「直線」または「矢印」で矢印を作成した場合は、(特に何もしなければ)自動的に付けられるNameは「Straight Connector #」または「Straight Arrow Connector #」となりますので(#は連続番号)、これらの名前で先に処理対象を絞り込んでしてしまえば、ご質問のエラーを回避できるのではないでしょうか。
No.7
- 回答日時:
単純にShapesをLoopした場合、
状況によっては[入力規則]の[リスト]のDropDownなどが含まれてしまう事があります
このDropDownはTopLeftCellを持ちません
回避方法としては名前判定以外は以下の方法が考えられます
A)
For Each s In ActiveSheet.Shapes
If s.Type = msoAutoShape Then
などShapesをLoopする冒頭でまずShape判定を入れる
[入力規則]DropDownはmsoFormControl
B)
Dim s As Object
For Each s In .DrawingObjects
として隠しオブジェクトのDrawingObjectsをLoopする
[入力規則]DropDownは除外される
ただしAutoShapeTypeを判定する場合 s.ShapeRange.AutoShapeType
C)
Dim s As Line
For Each s In .Lines
としてこれまた隠しオブジェクトのLineを使う
単純な直線矢印はOK、コネクタ矢印は対象外
TypeやAutoShapeTypeを判定する場合(B)同様 s.ShapeRange.AutoShapeType
ただしLineだけのLoopなので判定は必要なくなるはず
No.5
- 回答日時:
No3です
今、再度見てみたら不要な行が混ざってました。
一応、訂正しておきます。
>rw = s.TopLeftCell.Row
が、一行を置いて2回でてくるところは、後の方の記述は必要ないですね。
失礼いたしました。m(__)m
回答ありがとうございます。
rw = s.TopLeftCell.Row
のところで アプリケーション定義またはオブジェクト定義のエラーです。
とエラーが出ます。
rw に 14入っているのは確認したのですが何か分かるでしょうか?
No.4
- 回答日時:
No.2です。
初級レベル者なので考え方がベテラン様とは違うと思いますが、その辺はご容赦を。
取り敢えず8行目と9行目についてイミディエイトウィンドウに書き出してみました。
Sub megu()
Dim myDic As Object
Dim r As Range, rr As Range
Dim sp As Shape, i As Integer, v As Variant
Set myDic = CreateObject("Scripting.Dictionary")
For Each sp In ActiveSheet.Shapes
Set r = sp.TopLeftCell
If Not myDic.Exists(r.Row) Then
Set myDic(r.Row) = Range(r, sp.BottomRightCell)
Else
Set myDic(r.Row) = Union(myDic(r.Row), Range(sp.TopLeftCell, sp.BottomRightCell))
End If
Next
For i = 8 To 9
Set r = myDic(i)
Set rr = r.Areas(r.Areas.Count)
v = Split(rr.Address, ":")
Debug.Print i & "行目の開始日:" & Cells(6, myDic(i).Cells(1).Column).Value & _
" ~ 終了日:" & Cells(6, Range(v(UBound(v))).Column).Value & " です"
Set myDic(i) = Nothing
Next
Set myDic = Nothing
Set r = Nothing
Set rr = Nothing
End Sub
出力結果:
8行目の開始日:4 ~ 終了日:14 です
9行目の開始日:6 ~ 終了日:19 です
-------
相当不細工且つ長いので参考にもならないかも知れませんが、ベテラン様の方を参考になさってください。(途中までしかないですし)
No.3
- 回答日時:
こんにちは
No1様の方法と同じですが、ひとまず簡単なものを作成してみましたのでご参考までに。
オートシェイプの位置がどれだけ正確に作成されているのか不明なので、手入力等で行っている場合は、誤差判断の為の処理を追加すればよろしいかと。
以下では、対象セル内に矢印が納まっている(はみ出していない)ものとして計算しています。
No2様も指摘なさっていらっしゃいますが、若干のはみだしを許容するような考えなら、そのあたりの調整をする処理が必要になるでしょう。
オートシェイプは線分のものと仮定し、AutoShapeTypeが-2以外のシェイプは対象としないようにしてはいますが、「-2」は線分とは限らないので、シート上に他のシェイプがいろいろ存在するような場合は選別にもうひと手間が必要になると考えられます。
最終行の取得にA列を利用していますので、A列が最終行を示さない場合は、他の列を代表列にする必要があります。
Sub Sample()
Dim s As Object, data() As Integer
Dim rMax As Long, rw As Long, cl As Long
rMax = Cells(Rows.Count, 1).End(xlUp).Row
ReDim data(rMax, 1)
Range("G7").Resize(rMax - 6, 2).ClearContents
For Each s In ActiveSheet.Shapes
rw = s.TopLeftCell.Row
If s.AutoShapeType = -2 And rw <= rMax Then
rw = s.TopLeftCell.Row
If data(rw, 0) = 0 Then
data(rw, 0) = s.TopLeftCell.Column
Else
data(rw, 0) = Application.Min(data(rw, 0), s.TopLeftCell.Column)
End If
data(rw, 1) = Application.Max(data(rw, 1), s.Left + s.Width)
End If
Next s
For rw = 8 To rMax
cl = data(rw, 0)
If cl > 0 Then
Cells(rw, 7).Value = cl - 8
While Cells(1, cl).Left <= data(rw, 1)
cl = cl + 1
Wend
Cells(rw, 8).Value = cl - 9
End If
Next rw
End Sub

No.2
- 回答日時:
画像が画面全体になっているのでちょ~っとわかりにくいですけど。
>開始日:4日 終了日:14日 を取得できるようにしたいです。
この辺の意味が良くわかりません。
8行目に矢印があっても他の行にもあるのですよね?
行毎に矢印の範囲を取得すると言うより、全体の矢印について個々にどのセルが左上・右下になっているかを調べるならまだわかりますけど。
結局描画した順番がどうなっているのか?が不明なので全部を調べないとならないと初級レベル者は思います。
しかも矢印の先端が隣のセルにはみ出してたら1日分ズレますしね。
余りギリギリに配置するのもって感じます。
https://www.relief.jp/docs/excel-vba-set-range-v …
No.1
- 回答日時:
For Each sh In ActiveSheet.Shapes
MsgBox sh.Left + sh.Width
MsgBox sh.top
ccnt = 0
For i = 1 To 1000
If Cells(1, i).Left > sh.Left Then
MsgBox Cells(1, i - 1).Address
End
End If
Next
Next
これで左側が表示されます。
セルを検索してあるかではなく、矢印やボタンのオブジェクト基準になります
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) 行の一番右のデータセルと同じ列の日付を取得する方法 2 2022/09/22 20:05
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- その他(Microsoft Office) エクセル 条件付き書式 日をまたぐ塗りつぶし 1 2023/01/13 18:00
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA Shapesの座標からセル位置取得について教えてください
Visual Basic(VBA)
-
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
-
4
エクセルVBAでセル番地を指定してオブジェクト名取得
Excel(エクセル)
-
5
オートシェイプがずれる
Excel(エクセル)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
押したボタンの位置取得(共通のマクロ)
Excel(エクセル)
-
9
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
10
VBA Shapes コピーと名前
Excel(エクセル)
-
11
エクセルマクロで指定範囲内の図形を削除
Excel(エクセル)
-
12
VBAによる図形位置判定
Visual Basic(VBA)
-
13
Excel VBA オートシェイプ上のセル位置取得後、そのセル位置の日付を取得する方法について
Excel(エクセル)
-
14
エクセル マクロで、選択している画像の数を数えたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Wordに曲がった矢印を挿入した...
-
Excelのオートシェイプで2箇所...
-
寸法公差と寸法交差
-
Googleスライドの矢印の出し方
-
エクセルでセルに数値を入力す...
-
ユーチューブですが
-
JW-cadの寸法の矢印の大きさを...
-
パワーポイント。2つの矢印のワ...
-
イラストレーターCS2のことで教...
-
ACCESS 直線ツールの矢印
-
パワポ 矢印について
-
東西南北の矢印
-
イラストレーターでの面付け方...
-
visioで図の寸法を表示する
-
Auto CADの寸法線の分解方法
-
AutocadLT寸法値の優先に関し教...
-
エクセル コメントの矢印線を...
-
エクセルで矢印の太さを変えたい
-
autocad 特殊記号
-
AutoCAD LT2002 寸法値の切捨て...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Wordに曲がった矢印を挿入した...
-
Excelのオートシェイプで2箇所...
-
寸法公差と寸法交差
-
Googleスライドの矢印の出し方
-
このクラシックの曲名を教えて...
-
エクセル コメントの矢印線を...
-
ACCESS 直線ツールの矢印
-
JW-cadの寸法の矢印の大きさを...
-
携帯のインターネットの電波マ...
-
イラレで矢印の矢を小さくする...
-
autocad 特殊記号
-
道路にチョークで描かれた矢印
-
Auto CADの寸法線の分解方法
-
エクセルでセルに数値を入力す...
-
AutocadLT寸法値の優先に関し教...
-
最近iPhoneの上の真ん中の黒い...
-
組立公差の規格を教えてください
-
Auto CADの寸法矢印について
-
JPEG画像に矢印つきの寸法線を...
-
イラストレーターでの面付け方...
おすすめ情報