プロが教えるわが家の防犯対策術!

ご教授おねがいします。

エクセル2007で棒グラフ(100%積み上げ縦棒)を作成しています。

各棒の積上げ順序を、下から数値の大きい順に積上げたいのですが
手作業で変更するにはかなり量があります。(100件以上)
何か良い方法はありませんでしょうか。

何卒よろしくお願いします。

A 回答 (3件)

なかなか特殊なデータの持ち方を工夫しないと、ストレートな方法は無いと思う。


エクセルグラフは余り融通が利かない(ユーザーのニーズを入れる点は少ないと、いつも思う)
ーーー
個人的に興味を持ったので、VBAで出来ないか、やってみた。
参考までに。
中途ではあるし、お遊びのようなものに終わっているが、ちょっとした思い付きを実現するにも、それほど独自でやると複雑だということだろう。
ソートを自分でコードしなければならない部分でコード行数が増えている。
例データ
ーーーxyzu
a23124317
b3615739
c16381446
d2716565
X-Uはデータ項目名の代わり
ーーー
標準モジュールに
Sub test03()
Dim temp As Integer
Dim data(10) '列数に応じて増やすこと データを収納
Dim nam(10) '列数に応じて増やすこと 項目名を収納
Dim col(10) '列数に応じて増やすこと   棒の色コードを収納
Dim Count As Integer 'データ列数
clind = Array(0, 3, 4, 5, 6, 7, 9) '左列からの棒の着色コード
'---
Worksheets("Sheet1").DrawingObjects.Delete 'グラフなど抹消
b = 500# 'グラフのX軸位置
l = 135# 'グラフのY軸位置
w = 25# '棒の幅=太さ
d = Range("a65536").End(xlUp).Row 'データ最終行取得
r = Worksheets("Sheet1").Range("iv2").End(xlToLeft).column 'データ最右列取得
For i = 2 To d '行の繰り返し
'----各行の列データをバブルソート
For j = 2 To r
data(j - 1) = Cells(i, j)
col(j - 1) = j - 1
nam(j - 1) = Cells(1, j)
Next j
Count = j - 2
'---降順ソート
For j = 1 To r - 1 '比較元
s = j + 1
For k = s To Count '比較先

If data(j) < data(k) Then
temp = data(j): tempn = nam(j): tempc = col(j)
data(j) = data(k): nam(j) = nam(k): col(j) = col(k)
data(k) = temp: nam(k) = tempn: col(k) = tempc
End If
Next k
Next j
'---ソート完了
For j = 1 To r - 1 'データの大きいものから上に棒を積み上げ
v = data(j) * 3 '3倍は大きさの見栄えを調節
Worksheets("Sheet1").Shapes.AddShape(msoShapeRectangle, _
Left:=l, Top:=b - v, Width:=w, Height:=v).Select
Selection.Characters.Text = nam(j) & vbCr & data(j)
ci = clind(col(j))
Selection.Interior.ColorIndex = ci
b = b - v
Next j
b = 500# 'X軸位置に戻る
l = l + 50 '右へ棒の位置をずらす
Next i
'---X軸、Y軸直線を描く
ActiveSheet.Shapes.AddLine(135 - w, 500, l + 40, 500).Select
ActiveSheet.Shapes.AddLine(135 - w, 500, 135 - w, 100).Select
End Sub
'--
データ列数、行数の増加減少には対応。
b = 500# 'グラフのX軸位置
l = 135# 'グラフのY軸位置
w = 25# '棒の幅=太さ
の部分は調整すること。
(1)難しさ
しかしデータが多くなると1つの要素のマーカーの大きさを調節しないとならないので、面倒(試行錯誤)
(2)未完成
・軸の目盛と、見出しが出てない。
・数値が少ないとデータマーカなどの大きさを変えないと隠れてしまうが、フォントを下げると見難い場合が起こる。
・データ列が増えると区別する色も増やさないといけないが、要修正
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

VBAコードまで考えていただいて!!
ありがとうございます!

VBAは初心者ですので、
このコードをとりあえずコピーして、どこまでできるか、、
頑張ってみます。

かさねがさね、ありがとうございました。

お礼日時:2011/06/02 13:49

関数で6系列なら6^2系列つかえばできる。


画像は3系列を9系列で
「棒グラフ(積み上げ)の積上げ順を数値の大」の回答画像2
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

不勉強で申し訳ありません。
なかなかおっしゃる意味が分からなかったのですが、
表を良くみてexcelに書き出して
なんとなくですが 理解できました。。

応用できないかやってみます。
ありがとうございました。

お礼日時:2011/06/02 13:46

>各棒の積上げ順序を、下から数値の大きい順に積上げたい



「各棒の」という言葉が大変気になりますが,「棒ごとに」系列の順序を上下入れ替えることは,手動でも出来ません。



方法1:データ系列ごとに上下を入れ替えるには
元の表の全体を「大小の基準となる列または行により」並べ替えてしまえば,グラフの上下順はそれに追従します


方法2:「棒ごとに」上下を入れ替えるには
棒と棒のデータ系列の連続は「無視して」とにかく「大きいモノから積み上げ」たグラフを描きたいというお話なら。
元の表から,グラフの元にする並べ替えた別表を計算で作成し,そちらを元にグラフを描きます。

例:
 A列 B列 C列 D列
1項目 4月 5月 6月
2AA  2  1  5
3BB  4  4  2
4CC  6  2  1

6最大 =LARGE(B$2:B$4,ROW(B1)) 右にコピー
7中間  下にコピー
8最小

のように計算し直してA6:D8を元にグラフを作成します。
    • good
    • 1
この回答へのお礼

なるほど、元の表を関数を使って並べ替えるのですね。
アドバイスありがとうございます。

ただ、元の表のデータも大きいので、、、
データ系列も30種類ほどあり、項目が100件ほどでしょうか、、、、
どうしたらいいやらと、、

お礼日時:2011/06/02 13:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!