
エクセルで階層図を作りたいと思っています。
イメージとしては下図のような感じです。
│ A │ B
_│_____________
1│ ID番号│ 紹介者ID
2│ 01 │ --
3│ 02 │ 01
4│ 03 │ 01
5│ 04 │ 02
6│ 05 │ 02
7│ 06 │ 03
8│ 07 │ 03
↓↓↓↓↓↓↓↓↓↓↓↓
■01
├■02
│├■04
│└■05
└■03
├■06
└■07
セルの中にID番号を入れるだけで勝手に階層図ができたら非常に
楽なんですが、エクセルでこのような階層図を勝手に作るシステムを
組むことはできないでしょうか?
少しでも手がかりがあれば教えていただきたいと思いますので
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
> プログラムはそのままコピペして使えるのでしょうか?
はい、使えます。
ただし次の条件が必要です。
(1) ID表が入っているシートの名前を『ID表』とすること。
(『』 は付けませんよ)
(2) 他に『作業用』、『階層図』という名のシートをあらかじめ作っておくこと。
> VBAの画面のどこにコピペすればよろしいのでしょうか?
(1) まず普通に ID表 の入ったブックを開きます。
(仮に ABCD.XLS という名だとします)
(2) [Alt] + [F11] キーを押します。
→ VBAの編集画面が表示されます。(ここまではご存じですね)
(3) 画面左に プロジェクトエクスプローラー といタテ長の窓がありますから
その中の VBAProject(ABCD.XLS) を探し、左クリックします。
(4) メニュー > 挿入 > 標準モジュール
とすると画面右が真っ白になり、タイトルバーに
Microsoft Visual Basic - ABCD.XLS - [Module1(コード)]
などと表示されます。
この真っ白なのが Module1 で、メモ帳と同じように編集できます。
(5) そこへプログラムを貼り付けます。
・・・私のPCはExcel2003なので、多少の違いがあるかもしれません。
実行のしかたはご存じでしょうが、念のため申しますと、次の二通り。どちらでもよろしい。
(A) Sub 紹介者ツリー図() のどこかをクリックして [F5] を押す。
(B) Excelの画面に戻って
ツール > マクロ > マクロ で マクロ ダイアログを表示し
マクロ名 の中から 紹介者ツリー図 を探して選択し 実行 ボタンを押す。
余談ですが
VBAはとても便利な道具ですが、人により向き不向きがハッキリとあります。
もしあなたが実際に動かしてみて、『これは面白い』と思われたら
あなたには適正があります。 (^-^)
mimeuさん
ご親切に指導いただきありがとうございます!!
実際にやってみたら、見事動きました!!!VBAを知っていれば他にも出来る事が広がり、とても楽しいです。
自分の思い通りに動かすことができればとても楽ですね(^-^)
これを機に少しずつ勉強してみようと思います。ありがとうございました!
No.5
- 回答日時:
質問者様には申し訳ありませんが、回答ではありません。
mimeuさんのコードを、配管の系統図を描くのに使わせていただいたところ、Goodでした。
>罫線の一部がまだ描かれていませんが
処理の中に追加する才覚はないので、後処理で追加するコードを足して使用しましたが、完成を期待しています。「役に立った」です。
No.3
- 回答日時:
No2 です。
素データはこんな感じです。
この回答への補足
mimeuさん、早速ご回答いただきありがとうございます。
エクセルの関数であればおおよそわかりますが、VBAは前に少しやったことがある程度で、私にはほぼわかりません。
これを機にVBAも勉強してみようと思います!
ちなみに今、色々とやってみているのですが、先ほどお教えいただいたプログラムはそのままコピペして使えるのでしょうか?VBAの画面のどこにコピペすればよろしいのでしょうか?
エクセル2007を使ってます。VBAは手順自体をあまり理解していませんがVBAのボタンを押した画面までは出しました。初心者丸出しの質問で申し訳ないですが教えていただければ大変助かりますm(__)m
No.2
- 回答日時:
試しに作ってみました。
こんな感じです。罫線の一部がまだ描かれていませんが、まぁ納期優先ということで。 (^-^)
プログラムは以下の通り。
共有変数を使いまくって、程度の低さバレバレですが。
前提としてシートの名前は
『ID表』、『作業用』、『階層図』としています。
ID表が素データで、階層図がアウトプットです。
Option Explicit
Private ID表 As Worksheet, 作業用 As Worksheet, 階層図 As Worksheet
Private ID表の行末 As Long, 表示行 As Long
Sub 紹介者ツリー図()
Dim 行1 As Long, 行2 As Long, 行末 As Long
Set ID表 = Worksheets("ID表")
Set 作業用 = Worksheets("作業用")
Set 階層図 = Worksheets("階層図")
作業用.UsedRange.Clear
階層図.UsedRange.Clear
ID表の行末 = ID表.Range("A1").End(xlDown).Row
行2 = 1
For 行1 = 2 To ID表の行末
If ID表.Cells(行1, 2) = "--" Then
作業用.Cells(行2, 1) = ID表.Cells(行1, 1)
行2 = 行2 + 1
End If
Next 行1
行末 = 行2 - 1
表示行 = 1
For 行2 = 1 To 行末
階層図.Cells(表示行, 1) = "■" & 作業用.Cells(行2, 1).Text
表示行 = 表示行 + 1
ツリー図2 作業用.Cells(行2, 1).Text, 2
Next 行2
End Sub
Private Function ツリー図2(今のID As String, 階層)
' 紹介者列から大元ID に紹介されたID(A列)を列挙しソートする
Dim 行1 As Long, 行2 As Long, 行末 As Long, 列 As String, 罫線 As String
' 紹介者列から大元ID に紹介されたID(A列)を列挙しソートする
行2 = 1
For 行1 = 2 To ID表の行末
If ID表.Cells(行1, 2) = 今のID Then
作業用.Cells(行2, 階層) = ID表.Cells(行1, 1)
行2 = 行2 + 1
End If
Next 行1
行末 = 行2 - 1
列 = Chr(64 + 階層)
' 見やすくするため ID 番号順に並べ替え
If 行末 > 1 Then _
作業用.Range(列 & "1:" & 列 & 行末).Sort Key1:=作業用.Range(列 & "1"), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal
' 順に再帰コール
If 行末 > 0 Then
For 行2 = 1 To 行末
If 行2 = 行末 Then 罫線 = "└" Else 罫線 = "├"
階層図.Cells(表示行, 階層 - 1) = 罫線
階層図.Cells(表示行, 階層) = "■" & 作業用.Cells(行2, 階層).Text
表示行 = 表示行 + 1
ツリー図2 作業用.Cells(行2, 階層).Text, 階層 + 1
Next 行2
End If
End Function

No.1
- 回答日時:
面白いアイデアですね。
こういう図が出来れば人間関係が一目で分かる。 (^-^)
> エクセルでこのような階層図を勝手に作るシステム
はい、できます。
コンピュータープログラム学校の期末試験に使えそうな問題。
初級学生泣かせの、リカージョンの見本みたいなテーマです。
エクセルならVBAを使います。
やることとしては
(1) ID番号から順にひとつのID番号を取り上げ
シートに出力する行、階層の深さと共に (2) 以下の処理を渡す
(2) 紹介者ID に (1)のIDを持つ行を探しその行のID番号を列挙していく。
その時、それまで順にたどってきたIDが二度登場しないようにする。
(3) もし (2) に該当するIDがひとつもなければ
指定されたシートの指定行・列に渡されたIDを書込んでリターン
(4) (2) に該当するIDがあれば(2) そのIDについて順にもう一度 (2) を呼ぶ
といった感じになります。
・・・充分時間を掛けて検討していませんので、
(1)~(4) の説明は相当にラフです。 m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロVBAのフォルダ階層別で検索の方法 4 2022/04/03 23:23
- Excel(エクセル) フォルダ階層が深いファイルの拡張子の一括変換 2 2022/12/23 18:40
- 会計ソフト・業務用ソフト エクセルの文章の修正法について 3 2023/06/23 10:03
- Excel(エクセル) 条件付き書式 別のシートで色付けされたセルデータの転記漏れを防ぐ書式を入れたい 4 2022/04/22 06:36
- Excel(エクセル) 【VBA】A列の指定した値と同じ行にあるD列の値を順番にコピペするマクロについて 4 2023/02/01 18:16
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- JavaScript 階層別の組織図の自動作成について 1 2022/10/26 13:42
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- UNIX・Linux 【初心者】aws lightsail で自作のオリジナルテーマのwordpressを設定する方法 1 2022/07/14 09:46
- iPhone(アイフォーン) iPhone初期化について質問です。 親から使用時間や勝手にアプリをインストールできないように規制が 2 2022/08/21 11:52
このQ&Aを見た人はこんなQ&Aも見ています
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
ゴリラ向け動画配信サイト「ウホウホ動画」にありがちなことを教えて下さい。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
準・究極の選択
「年収1000万円で一生カレーライス」か「年収180万円で毎日何でも食べ放題」
-
VBAにてツリー階層表示ツールの作成
Visual Basic(VBA)
-
ExcelのVBAでデータをツリー構造にしたい
Excel(エクセル)
-
ツリービューを使って、エクスプローラのようなものを作りたい。
Visual Basic(VBA)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで空白行を削除する ...
-
マクロで最終行を取得してコピ...
-
マクロにて指定の文字間の文字...
-
エクセルのデータがない行には...
-
Excel マクロ 検索結果を別シ...
-
VB.net
-
【VBA】条件に一致しない行を削...
-
条件に合った行を削除するマク...
-
Excel97 指定した行だけマク...
-
【至急】Excel 同一人物の情報...
-
列から特定の文字列検索→該当以...
-
各個体に対する平均値の自動計...
-
Excel VBAでオートフィルタで抽...
-
【VBA】条件に一致しない行を削...
-
数値に見えるものはすべて数値...
-
テキストファイル読み込みにお...
-
エクセルのVBAで指定した行数の...
-
エクセルマクロでグループごと...
-
VBA 複数列コンボボックス 値の...
-
VBAで保存しないで閉じると空の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロで最終行を取得してコピ...
-
数値に見えるものはすべて数値...
-
Excel VBAでオートフィルタで抽...
-
エクセルで空白行を削除する ...
-
VB.net
-
【VBA】条件に一致しない行を削...
-
エクセルのデータがない行には...
-
列から特定の文字列検索→該当以...
-
エクセルで階層図を作る方法
-
Excel97 指定した行だけマク...
-
Excel マクロ 検索結果を別シ...
-
【VBA】条件に一致しない行を削...
-
マクロにて指定の文字間の文字...
-
エクセルのVBAで指定した行数の...
-
空白を複数行一気に挿入するには?
-
vbaエクセルマクロについて she...
-
VBA 複数列コンボボックス 値の...
-
excel2021で実行できないマクロ...
-
関数入りの行挿入。。。上書き...
-
オートフィルターの複数条件検...
おすすめ情報