ここから本文です

お世話になります。前回も大変お手数おかけしました。

qqt********さん

2018/3/2611:39:43

お世話になります。前回も大変お手数おかけしました。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q101856796...

前回の結論としては、そもそものデータに問題があることを認識し、そもそも何を実現したいのかと・・というところに立ち返って考えてましたので返信が出来ず終了となってしまいました。苦労してコードを作っていただいたのに申し訳ありませんでした。

前回ご相談させてもらったブロック図は一旦ハンドメイドで対応することとし、改めて、VBAで実現したいことを整理いたしました。テキストボックスは難しいと伺ったますが、改めて実現可否を教えてください。

1.概要

実現したい概要ですが、以下の3点になります。
①シート”リスト”をもとにシート”アウトプット”をマクロで自動生成する。
②シート”アウトプット”に自動生成されたテキストボックスからシート”リスト”にハイパーリンクを設定する
③シート”リスト”を文字列が格納されているセルをクリックすると、シート”アウトプット”の該当するテキストボックスが選択される

2.使い方イメージ

・アウトプットが自動生成された後、リストでは把握できない全体構造を把握しながら、リスト データで詳細を確認する。

・リストとアウトプットを往来しながらデータを確認し、データに対する理解を深める

3.環境
OS:Windwos7
EXCEL:2010

4.インプット/アウトプットデータ
https://box.yahoo.co.jp/guest/viewer?sid=box-l-ome3pwqdstgxxuv3ftep...

この質問は、kik********さんに回答をリクエストしました。

閲覧数:
165
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

kik********さん

リクエストマッチ

2018/3/2710:05:12

考え方・部品の提供だけで良いですか?

> テキストボックス

と表現されてますが、四角形(図形)ですよね

シート リスト からのデータ解釈は、

A 列 アジア の行範囲で、B 列を解釈
B 列 日本 の行範囲で、C 列を解釈
C 列 東京都 の行範囲で、D 列を解釈
D 列 墨田区 の行範囲で、E 列を解釈

この解釈は、再帰を使うと楽です
そして、E 列側から書き出す様にしてみます
以下の Samp1 群が例

Public Sub Samp1()
   Worksheets("リスト").Activate
   Call fncSamp1(1, 2, Cells(Rows.Count, "A").End(xlUp).Row)
End Sub

Private Sub fncSamp1(jC As Long, jS As Long, jE As Long)
   Dim i As Long, k As Long

   If (jC >= 5) Then
      For i = jS To jE
         Debug.Print Cells(i, jC).Value
      Next
      ' ★
   Else
      i = jS
      While (i <= jE)
         For k = i + 1 To jE
            If (Cells(k, jC).Value <> Cells(i, jC).Value) Then Exit For
         Next
         Call fncSamp1(jC + 1, i, k - 1) ' ▲
         Debug.Print Cells(i, jC).Value
         ' ★★
         i = k
      Wend
   End If
End Sub

指定された範囲で連続したものを求めて、▲ 部分で再帰呼び出し
これを実行してみると

亀戸
錦糸町
両国
墨田区
・・・・
千代田区
・・・・
台東区
・・・・
江東区
・・・・
品川区
・・・・
練馬区
東京都
・・・・
名古屋市
愛知県
日本
・・・・

の様な結果が得られます
これを、四角形 を使って 図 にするのなら、再帰呼び出しする際、
書き出し左上座標を引数で与え、
再帰呼び出しからの戻り値に、最後に書き出した右下座標
★ 部分では、最後に書き出した右下座標
★★ 部分では、戻り値の右下座標を使って、図作成後、最背面に移動・・・?
Y 座標は最大値を更新しながら・・・・

座標を与える・得たら、ズラす分を加算して・・・

※ Samp1 群では、戻り値・・・の例にはなってません

Excel は表計算ソフト?
図形は余り用いないので・・・・
図の部分は、調べてみてください


以下の Samp2 の例は、隣り合った同じものはセル結合するものになります
実行すると、シート リスト は壊れる(セル結合される)ので、テスト用環境で
そのままの状態でセル結合(縦方向)してますが、
他シートに、行列変換しながら生成後、横方向にすれば、
アウトプット に近い???表現???になりそうな気も・・・・


Public Sub Samp2()
   Worksheets("リスト").Activate
   Call fncSamp2(1, 2, Cells(Rows.Count, "A").End(xlUp).Row)
End Sub

Private Sub fncSamp2(jC As Long, jS As Long, jE As Long)
   Dim i As Long, k As Long

   i = jS
   While (i <= jE)
      For k = i + 1 To jE
         If (Cells(k, jC).Value <> Cells(i, jC).Value) Then Exit For
      Next
      If (jC < 4) Then Call fncSamp2(jC + 1, i, k - 1)
      If (k - i > 1) Then
         Application.DisplayAlerts = False
         Cells(i, jC).Resize(k - i).Merge
         Application.DisplayAlerts = True
      End If
      i = k
   Wend
End Sub



こんな回答で良かったですか?

  • 質問者

    qqt********さん

    2018/3/2716:17:54

    ご回答ありがとうございます。考え方と部品を提供してもらえましたので、大分前進したと思います。後は四角形(図形)の生成、部品で抽出した文字列を格納、四角形のサイズ変更になりますので頑張ってみます。四角形の位置については割り切ってハンド対応で良いかなと思いました。トライしてみます。部品について質問させて頂くかもしれませんのでクローズ(ベストアンサー確定)はもう少し後にさせてください。ありがとうございます。感謝!!

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/4/1 07:38:08

いつもありがとうございます。オブジェクト作成・ハイパーリンク設定までは何とか、辿りつけました。(ハイパーリンクの設定先が今課題ですが・・・)

お手数おかけいたしました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる