Excel VBA 質問スレッド №2000 (解決済)
オートシェイプaddlineをセルに沿うように動かす
投稿者 : けろ 投稿日時 : 2024/08/23(Fri) 14:57:18 OS : Windows 10 EXCEL : Excel 2013
ExcelのVBAでそのような事ができるか教えてください。
オートシェイプのaddlineで横に向かって工程線を引いています。
Excelの機能で図形配置・レイアウト⇒配置⇒枠線に合わせる・図形の位置を合わせるでも、ある程度スナップしてくっつくのですが、今ある工程線によそからカットしてもってきた別の工程線を貼り付けて、配置⇒下ぞろえ等をして綺麗に続く線を作っていますが、微調整に時間がかかっています。
vbaでaddlineに属性を持たせるというか、
セルの中心にしかスナップしないようにとか、セル枠にそってしか動かせないような事は技術的にできるものでしょうか。
ここまできたらソフトウェアを買うレベルですよね。
ExcelのVBAでそのような事ができるか教えてください。
オートシェイプのaddlineで横に向かって工程線を引いています。
Excelの機能で図形配置・レイアウト⇒配置⇒枠線に合わせる・図形の位置を合わせるでも、ある程度スナップしてくっつくのですが、今ある工程線によそからカットしてもってきた別の工程線を貼り付けて、配置⇒下ぞろえ等をして綺麗に続く線を作っていますが、微調整に時間がかかっています。
vbaでaddlineに属性を持たせるというか、
セルの中心にしかスナップしないようにとか、セル枠にそってしか動かせないような事は技術的にできるものでしょうか。
ここまできたらソフトウェアを買うレベルですよね。
スポンサーリンク
[返信 1] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : さんこう 投稿日時 : 2024/08/23(Fri) 15:04:18
>Excelの機能で図形配置・レイアウト⇒配置⇒枠線に合わせる・図形の位置を合わせるでも、ある程度スナップしてくっつくのですが、
>今ある工程線によそからカットしてもってきた別の工程線を貼り付けて、配置⇒下ぞろえ等をして綺麗に続く線を作っていますが、微調整に時間がかかっています。
VBAで線を引けばよろしいかと思います。
<VBA セルに合わせて図形の線を引く>
https://www.google.com/search?q=VBA+%E3%82%BB%E3%83%AB%E3%81%AB%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E5%9B%B3%E5%BD%A2%E3%81%AE%E7%B7%9A%E3%82%92%E5%BC%95%E3%81%8F
>Excelの機能で図形配置・レイアウト⇒配置⇒枠線に合わせる・図形の位置を合わせるでも、ある程度スナップしてくっつくのですが、
>今ある工程線によそからカットしてもってきた別の工程線を貼り付けて、配置⇒下ぞろえ等をして綺麗に続く線を作っていますが、微調整に時間がかかっています。
VBAで線を引けばよろしいかと思います。
<VBA セルに合わせて図形の線を引く>
https://www.google.com/search?q=VBA+%E3%82%BB%E3%83%AB%E3%81%AB%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E5%9B%B3%E5%BD%A2%E3%81%AE%E7%B7%9A%E3%82%92%E5%BC%95%E3%81%8F
[返信 2] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : けろ 投稿日時 : 2024/08/23(Fri) 16:31:29
ありがとうございます。
選択したセルに罫線を引くのは完成しておりますが、人手が足りなくなってきた時に工程線をパズルのようにあちこち組み替えながらやりくりをしておりまして、これはこの人に、これはこの人にと、addlineをあちこち動かしております。
addlineに名前をつけて、その名前のaddlineの属性でセル枠にそって動くとかことができたらいいなと考えておりましたが、検索してもなかなかヒットせず...悩んでおりましたが、エクセルでそもそもそこまでしようと思うのが違うのかとも悩んでいます。
できたらありがたいのですが...
ありがとうございます。
選択したセルに罫線を引くのは完成しておりますが、人手が足りなくなってきた時に工程線をパズルのようにあちこち組み替えながらやりくりをしておりまして、これはこの人に、これはこの人にと、addlineをあちこち動かしております。
addlineに名前をつけて、その名前のaddlineの属性でセル枠にそって動くとかことができたらいいなと考えておりましたが、検索してもなかなかヒットせず...悩んでおりましたが、エクセルでそもそもそこまでしようと思うのが違うのかとも悩んでいます。
できたらありがたいのですが...
[返信 3] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : さんこう 投稿日時 : 2024/08/23(Fri) 17:05:47
>addlineに名前をつけて、その名前のaddlineの属性でセル枠にそって動くとかことができたらいいな
「addline」というのは、オートシェイプの線のことだと思っていますが、
まっすぐ動かしたいなら「SHIFT」キーを押しながら動かせばいいわけですし、
セルの角にあわせたいなら、「ALT」キーを押しながら動かせばいいのですが、そういうことではないのでしょうか。
線を適当に動かしておいて、近くのセルにあわせて再配置するとかもVBAでできそうですが、
そもそも、どんな操作をしているのかイメージできていません。
「微調整に時間がかかる」とのことですが、どういう状況か謎です。
>addlineに名前をつけて、その名前のaddlineの属性でセル枠にそって動くとかことができたらいいな
「addline」というのは、オートシェイプの線のことだと思っていますが、
まっすぐ動かしたいなら「SHIFT」キーを押しながら動かせばいいわけですし、
セルの角にあわせたいなら、「ALT」キーを押しながら動かせばいいのですが、そういうことではないのでしょうか。
線を適当に動かしておいて、近くのセルにあわせて再配置するとかもVBAでできそうですが、
そもそも、どんな操作をしているのかイメージできていません。
「微調整に時間がかかる」とのことですが、どういう状況か謎です。
[返信 4] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : けろ 投稿日時 : 2024/08/24(Sat) 10:30:10
ありがとうございます。
shiftキーを水平にはきれいに動かせますが、別の行にカットペーストする事も多いです。
altキーを押すというのは一応説明はしますが、私がこのプログラムを使って工程線を作るわけではないので(もっと年配の50代の人が使う)にはなじみがなくて、何か良い方法がないかなと思っていました。
A 8/1 8/2 8/3 8/4 ・ ・ ・
1 佐藤 →→→→ →→→→→→→→→→→→→→→→
2 田中 →→→→→→→→→→ →→→→→→→→→→
3 伊藤 →→→→→ →→→→→→→→→→
4 木村 →→→→ 休 →→→→→ →→→→
5 鈴木 →→→→ →→→→→ →→→→→ 休
6 ・ ↑この鈴木さんの8/2の工程線は、8/2に急遽休むことになった木村さんのaddlineをこっちに移動しました。
7 ・ 8/1と8/3はすでにaddlineがあったのでその線と急遽木村さんから持ってきた線を選択して、図形の下ぞろえをしています。
8 ・ 工程遅れ、急遽の休み、機械故障等、こういう工程のパズルを毎日頻繁に行っています。
9 ・
10 ・
・
・
・
さんこうさんのご意見で、altキーを使えばよいというアイデアがありましたので、
まわりくどいですが、ユーザーフォームに工程線移動キーボタンを作って、そのボタンを押すと
altを押したモードになるようにしようかなと思っています。
年配の方がそのボタンを押してくれるかわかりませんが…
左手を使いながら右手も使う事動作ができないので(ctrl+C、X、V)とかが出来ないので…Altを押しながら移動してください、といっても通じるかどうかわかりません。
それならaltモードの切り替えは良いかなと思いましたのでやってみます。
■[返信 3] さんこうさん(2024-08-23 17:05:47)の記事
> >addlineに名前をつけて、その名前のaddlineの属性でセル枠にそって動くとかことができたらいいな
>
> 「addline」というのは、オートシェイプの線のことだと思っていますが、
>
> まっすぐ動かしたいなら「SHIFT」キーを押しながら動かせばいいわけですし、
>
> セルの角にあわせたいなら、「ALT」キーを押しながら動かせばいいのですが、そういうことではないのでしょうか。
>
>
> 線を適当に動かしておいて、近くのセルにあわせて再配置するとかもVBAでできそうですが、
>
> そもそも、どんな操作をしているのかイメージできていません。
>
> 「微調整に時間がかかる」とのことですが、どういう状況か謎です。
>
>
>
ありがとうございます。
shiftキーを水平にはきれいに動かせますが、別の行にカットペーストする事も多いです。
altキーを押すというのは一応説明はしますが、私がこのプログラムを使って工程線を作るわけではないので(もっと年配の50代の人が使う)にはなじみがなくて、何か良い方法がないかなと思っていました。
A 8/1 8/2 8/3 8/4 ・ ・ ・
1 佐藤 →→→→ →→→→→→→→→→→→→→→→
2 田中 →→→→→→→→→→ →→→→→→→→→→
3 伊藤 →→→→→ →→→→→→→→→→
4 木村 →→→→ 休 →→→→→ →→→→
5 鈴木 →→→→ →→→→→ →→→→→ 休
6 ・ ↑この鈴木さんの8/2の工程線は、8/2に急遽休むことになった木村さんのaddlineをこっちに移動しました。
7 ・ 8/1と8/3はすでにaddlineがあったのでその線と急遽木村さんから持ってきた線を選択して、図形の下ぞろえをしています。
8 ・ 工程遅れ、急遽の休み、機械故障等、こういう工程のパズルを毎日頻繁に行っています。
9 ・
10 ・
・
・
・
さんこうさんのご意見で、altキーを使えばよいというアイデアがありましたので、
まわりくどいですが、ユーザーフォームに工程線移動キーボタンを作って、そのボタンを押すと
altを押したモードになるようにしようかなと思っています。
年配の方がそのボタンを押してくれるかわかりませんが…
左手を使いながら右手も使う事動作ができないので(ctrl+C、X、V)とかが出来ないので…Altを押しながら移動してください、といっても通じるかどうかわかりません。
それならaltモードの切り替えは良いかなと思いましたのでやってみます。
■[返信 3] さんこうさん(2024-08-23 17:05:47)の記事
> >addlineに名前をつけて、その名前のaddlineの属性でセル枠にそって動くとかことができたらいいな
>
> 「addline」というのは、オートシェイプの線のことだと思っていますが、
>
> まっすぐ動かしたいなら「SHIFT」キーを押しながら動かせばいいわけですし、
>
> セルの角にあわせたいなら、「ALT」キーを押しながら動かせばいいのですが、そういうことではないのでしょうか。
>
>
> 線を適当に動かしておいて、近くのセルにあわせて再配置するとかもVBAでできそうですが、
>
> そもそも、どんな操作をしているのかイメージできていません。
>
> 「微調整に時間がかかる」とのことですが、どういう状況か謎です。
>
>
>
[返信 5] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : さんこう 投稿日時 : 2024/08/24(Sat) 11:11:11
説明ありがとうございます。
1つセルに1本の線であれば、
線の左端がセル内に入るように移動しておいて、
ボタンを押すとかして、
線の左端をセルの左端にあわせるなどの処理を
実行すればよろしいかと思います。
名前をダブルクリックすると、その行の線が
キレイに揃うみたいな処理でもよさそうに思います。
説明ありがとうございます。
1つセルに1本の線であれば、
線の左端がセル内に入るように移動しておいて、
ボタンを押すとかして、
線の左端をセルの左端にあわせるなどの処理を
実行すればよろしいかと思います。
名前をダブルクリックすると、その行の線が
キレイに揃うみたいな処理でもよさそうに思います。
[返信 6] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : higeru 投稿日時 : 2024/08/24(Sat) 13:49:24
> 名前をダブルクリックすると、その行の線が
> キレイに揃うみたいな処理でもよさそうに思います。
まったく同じことを考えました。ということで。
alignArrowTopLeft の処理は以下の通り。
1. 矢印の左端を(近い)セルの左端に合わせ、
2. 行の中央にする。
3. (微妙に斜めになっていても)水平にする。
なお矢印の名前は "Straight Arrow" で始まるものとしています。「線」を矢印にしたものは "Straight Connector *" になるので、必要に応じて変更してください。
> 名前をダブルクリックすると、その行の線が
> キレイに揃うみたいな処理でもよさそうに思います。
まったく同じことを考えました。ということで。
alignArrowTopLeft の処理は以下の通り。
1. 矢印の左端を(近い)セルの左端に合わせ、
2. 行の中央にする。
3. (微妙に斜めになっていても)水平にする。
なお矢印の名前は "Straight Arrow" で始まるものとしています。「線」を矢印にしたものは "Straight Connector *" になるので、必要に応じて変更してください。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim rowCenter As Double: rowCenter = Target.Top + Target.Height / 2 Dim shp As Shape For Each shp In Me.Shapes If shp.Name Like "Straight Arrow*" Then If shp.TopLeftCell.Row = Target.Row Then Call alignArrowTopLeft(shp) Cancel = True End If End If Next End Sub Private Sub alignArrowTopLeft(arrow As Shape) With arrow .Top = .TopLeftCell.Top + .TopLeftCell.Height / 2 .Left = IIf(.Left - .TopLeftCell.Left < .TopLeftCell.Offset(, 1).Left - .Left, .TopLeftCell.Left, .TopLeftCell.Offset(, 1).Left) .Height = 0 End With End Sub
[返信 7] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : higeru 投稿日時 : 2024/08/24(Sat) 14:50:13
■[返信 6] higeruさん(2024-08-24 13:49:24)の記事
> > 名前をダブルクリックすると、その行の線が
> > キレイに揃うみたいな処理でもよさそうに思います。
>
> まったく同じことを考えました。ということで。
書き忘れましたが、蛇足ながら。名前(A列)に限らず「ダブルクリックした行」に対して処理するようにしています。
■[返信 6] higeruさん(2024-08-24 13:49:24)の記事
> > 名前をダブルクリックすると、その行の線が
> > キレイに揃うみたいな処理でもよさそうに思います。
>
> まったく同じことを考えました。ということで。
書き忘れましたが、蛇足ながら。名前(A列)に限らず「ダブルクリックした行」に対して処理するようにしています。
[返信 8] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : けろ 投稿日時 : 2024/08/24(Sat) 20:02:22
ありがとうございます。
到底思いつかない画期的というか一番シンプルなアイデアで、動かしてみると理想通りでした。
これの波及で、例えばですがダブルクリックした行全てのStraight Arrowに適用するのではなく、ダブルクリックしたStraight Arrow単独にだけ、左端を近いセルの左端に合わせ、
行の中央にする。微妙に斜めになっていても水平にする。を適用しようと思ったらIf shp.TopLeftCell.Row = Target.Row Thenのところを変更すれば良いでしょうか。
■[返信 7] higeruさん(2024-08-24 14:50:13)の記事
> ■[返信 6] higeruさん(2024-08-24 13:49:24)の記事
> > > 名前をダブルクリックすると、その行の線が
> > > キレイに揃うみたいな処理でもよさそうに思います。
> >
> > まったく同じことを考えました。ということで。
>
> 書き忘れましたが、蛇足ながら。名前(A列)に限らず「ダブルクリックした行」に対して処理するようにしています。
ありがとうございます。
到底思いつかない画期的というか一番シンプルなアイデアで、動かしてみると理想通りでした。
これの波及で、例えばですがダブルクリックした行全てのStraight Arrowに適用するのではなく、ダブルクリックしたStraight Arrow単独にだけ、左端を近いセルの左端に合わせ、
行の中央にする。微妙に斜めになっていても水平にする。を適用しようと思ったらIf shp.TopLeftCell.Row = Target.Row Thenのところを変更すれば良いでしょうか。
■[返信 7] higeruさん(2024-08-24 14:50:13)の記事
> ■[返信 6] higeruさん(2024-08-24 13:49:24)の記事
> > > 名前をダブルクリックすると、その行の線が
> > > キレイに揃うみたいな処理でもよさそうに思います。
> >
> > まったく同じことを考えました。ということで。
>
> 書き忘れましたが、蛇足ながら。名前(A列)に限らず「ダブルクリックした行」に対して処理するようにしています。
[返信 9] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : higeru 投稿日時 : 2024/08/25(Sun) 17:36:12
シートだから BeforeDoubleClick というイベントが使えるので、オートシェイプにはダブルはおろかシングルクリックのイベントもありません。
以前シートに挿入した画像をダブルクリックして上下反転させるという処理を書きました(その時参考にしたのが以下のサイトだったと思いますが、「vba 図形をダブルクリック」で検索したら、もっと分かりやすいのが見つかりました)が、
https://riptutorial.com/excel-vba/example/13687/double-click-event-for-excel-shapes
オートシェイプにこのプロシージャを「マクロの登録」しないと使えません。換言するとそのオートシェイプの挿入自体をマクロで行わないということになります。
シートだから BeforeDoubleClick というイベントが使えるので、オートシェイプにはダブルはおろかシングルクリックのイベントもありません。
以前シートに挿入した画像をダブルクリックして上下反転させるという処理を書きました(その時参考にしたのが以下のサイトだったと思いますが、「vba 図形をダブルクリック」で検索したら、もっと分かりやすいのが見つかりました)が、
https://riptutorial.com/excel-vba/example/13687/double-click-event-for-excel-shapes
オートシェイプにこのプロシージャを「マクロの登録」しないと使えません。換言するとそのオートシェイプの挿入自体をマクロで行わないということになります。
[返信 10] Re : オートシェイプaddlineをセルに沿うように動かす
投稿者 : けろ 投稿日時 : 2024/08/25(Sun) 19:44:28
大変助かりました。できること、できないことについても学べました。
一旦、行単位で整列する方向で説明してみたいと思います。
皆さまありがとうございました。
大変助かりました。できること、できないことについても学べました。
一旦、行単位で整列する方向で説明してみたいと思います。
皆さまありがとうございました。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-07-06 06:19:42 )