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

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

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

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

Q&A

0回答

1138閲覧

インデックスエラーがわからない~プログラム~

jun_endo

総合スコア56

VBA

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

0グッド

0クリップ

投稿2018/07/24 04:42

編集2018/07/24 04:44

###やりたいこと

質問内容
上記の質問のプログラムのみを
書き込んだフォームです。
質問内容については、リンク先に飛んでください。

vba

1Option Explicit 2 3Public sn As Integer: Public sw As Integer 4Dim row As Long, n As Long 5Public 右上座標x, 右下座標x, 左上座標x, 左下座標x As Variant 6Public 右上座標y, 右下座標y, 左上座標y, 左下座標y As Variant 7Public 始点x As Variant, 始点y As Variant, 差分x As Integer 8Public 終点x As Variant, 終点y As Variant, 差分y As Integer 9--------------------------------------------------------------------- 10 11Sub 寸法取得() 12 13'シート数を数える 14sn = Worksheets.Count 15 16 17 18Dim 横線(), 縦線(), 石番号() As Variant 19DimAs Integer,As Integer,As Integer 20 21row = 2:= 0:= 0:= 0 22 23'動的配列 24ReDim Preserve 横線(), 縦線(), 石番号() 25 26'シートを指定する(アクティブ) 27With Sheets(sn) 28 29 'シートの空白行まで 30 Do While .Cells(row, 1) <> "" 31 32 'セルの中身が石番号なら別の処理をする 33 If .Cells(row, 1) <> "●18石番号" Then 34 35 '各画層の始点と終点のx,yの値を代入する 36 始点x = .Cells(row, 2): 始点y = .Cells(row, 3) 37 終点x = .Cells(row, 4): 終点y = .Cells(row, 5) 38 39 'xの始点と終点の値が同じならそれは縦線 40 If 始点x = 終点x Then 41 '縦線は(y始点,y終点,xの座標)のコンマ区切りの文字列 42 縦線() = 始点y & "," & 終点y & "," & 始点x 43 '(xは終始同じ数値なので始点のみ記述) 44=+ 1 45 ReDim Preserve 縦線() 46 Else 47 'yの始点と終点の値が同じならそれは横線 48 If 始点y = 終点y Then 49 '横線は(x始点,x終点,yの座標)のコンマ区切りの文字列 50 横線() = 始点x & "," & 終点x & "," & 始点y 51 '(yは終始同じ数値なので始点のみ記述) 52=+ 1 53 ReDim Preserve 横線() 54 End If 55 End If 56 Else 57 '石番号は(x座標,y座標,石番号)のコンマ区切りの文字列 58 石番号() = .Cells(row, 2) & "," & .Cells(row, 3) & "," & .Cells(row, 7) 59=+ 1 60 ReDim Preserve 石番号() 61 End If 62 row = row + 1 63 Loop 64End With 65 66Dim 固定比較, 流動比較, 交点() As Variant 67'基準となる変数=固定比較 68'比較時に基準とならない変数=流動比較 69 70DimAs Integer, n_2 As Long, xn As Long 71 72= 0 73 74ReDim Preserve 交点(0) 75 76'縦線を中心に交点を求めていく 77For n = 0 To- 1 78 '縦線の文字列をコンマで分割する 79 固定比較 = Split(縦線(n), ",") 80 For n_2 = 0 To- 1 81 '横線の文字列をコンマで分割する 82 流動比較 = Split(横線(n_2), ",") 83 84 '交点が縦と横の線それぞれの範囲内に存在するか調べる 85 If 固定比較(0) <= 流動比較(2) And 流動比較(2) >= 固定比較(1) And _ 86 流動比較(0) <= 固定比較(2) And 固定比較(2) >= 流動比較(1) Then 87 ' 88 '交点は(x座標,y座標)のコンマ区切りの文字列 89 交点() = 固定比較(2) & "," & 流動比較(2) 90=+ 1 91 ReDim Preserve 交点() 92 End If 93 Next n_2 94Next n 95 96 97Dim x軸() As Variant 98 99ReDim x軸(0) 100xn = 0 101 102'交点と交点を結ぶ線分の探索 103For n = 0 To- 1 104 固定比較 = Split(交点(n), ",") 105 106 For n_2 = n + 1 To- 1 107 流動比較 = Split(交点(n_2), ",") 108 109 '横線の条件に一致しているかを調べる 110 If 固定比較(1) = 流動比較(1) Then 111 112 '数値の大小を調べて始点、終点を決める 113 If 固定比較(0) < 流動比較(0) Then 114 'x軸は(始点x,始点y,終点x,終点y)のコンマ区切りの文字列 115 x軸(xn) = 交点(n) & "," & 交点(n_2) 116 Else 117 x軸(xn) = 交点(n_2) & "," & 交点(n) 118 End If 119 xn = xn + 1 120 ReDim Preserve x軸(xn) 121 End If 122 Next n_2 123Next n 124 125Dim 交四点() As Variant, fn As Long 126fn = 0 127ReDim 交四点(0) 128 129'横線を決めたので、それぞれの横線の長さが同じものを探索する 130For n = 0 To xn - 1 131 固定比較 = Split(x軸(n), ",") 132 For n_2 = n + 1 To xn - 1 133 'MsgBox (UBound(x軸)) 134 流動比較 = Split(x軸(n_2), ",") 135 136 'x座標が同じものを探索 137 If 固定比較(0) = 流動比較(0) And 固定比較(2) = 流動比較(2) Then 138 If 固定比較(1) < 流動比較(1) And 固定比較(3) < 流動比較(3) Then 139 140 '交四点は(上辺に当たるx軸,底辺に当たるx軸)のコンマ区切りの文字列 141 交四点(fn) = x軸(n) & "," & x軸(n_2) 142 Else 143 交四点(fn) = x軸(n_2) & "," & x軸(n) 144 End If 145 146 fn = fn + 1 147 ReDim Preserve x軸(fn) 148 End If 149 Next n_2 150Next n 151'現在のシートの枚数 152sn = Worksheets.Count 153 154'シートの追加 155Worksheets().Add After:=Worksheets(sn) 156'表示 157For n = 0 To fn -1 158Sheets(sn+1).cells(n,1) = x軸(n) 159Next n

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問