
エクセルで階層図を作りたいと思っています。
イメージとしては下図のような感じです。
│ 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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでオートフィルタで抽...
-
excel データを2行づつコピー
-
行挿入+貼付けと空白行削除を同...
-
列から特定の文字列検索→該当以...
-
Excelのマクロについて質問です...
-
マクロで最終行を取得してコピ...
-
【マクロ】A列最終行までを、カ...
-
【エクセルマクロ】シート内の...
-
数値に見えるものはすべて数値...
-
Excel マクロ 検索結果を別シ...
-
Excel VBAで範囲選択後にソート...
-
WPSOffice_マクロの有効化について
-
VBAで保存しないで閉じると空の...
-
複数のマクロボタンをまとめて...
-
【Excel VBA】マクロでExcel自...
-
エクセル関数>参照ファイル名...
-
Excel マクロの編集がグレーに...
-
エクセルのvbaにて thisworkboo...
-
LDPlayerのマクロの編集方法を...
-
Excelマクロで、稼働中のマクロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
Excel VBAでオートフィルタで抽...
-
数値に見えるものはすべて数値...
-
VB.net
-
列から特定の文字列検索→該当以...
-
エクセルで空白行を削除する ...
-
Excel マクロ 検索結果を別シ...
-
エクセルのデータがない行には...
-
【マクロ】A列最終行までを、カ...
-
【VBA】条件に一致しない行を削...
-
各個体に対する平均値の自動計...
-
エクセルのVBAで指定した行数の...
-
EXCEL VBAでA列にある空白行よ...
-
VBAでの重複データに色付け
-
空白を複数行一気に挿入するには?
-
エクセルで階層図を作る方法
-
vbaエクセルマクロについて she...
-
【至急】Excel 同一人物の情報...
-
Excel97 指定した行だけマク...
おすすめ情報