1233456818 Excel


あるエクセルファイルの一カラムをコピーし、新しいエクセルファイルに貼り付けます。
そのデータは

2
3
2
3
1

のような感じです。これを2Dの棒グラフにしたいのですが、どうすればいいのでしょうか?
ちなみにX軸は左からデータの小さい順。
Y軸は各値のパーセンテージ。
上のデータの場合は2が2つ、3が2つ、1が1つ。なので、X軸は1,2,3
Y軸は0〜100パーセント

です。

又、PHPのgmtime()で発行されたタイムスタンプを 西暦-月-日 に変更する方法を教えて下さい。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/02/08 11:55:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント26pt

マクロを使用した例ですが、新しいシートのA列にデータを置き、下記のマクロを

シート下のシートタブを右クリックして「コードの表示」で選択した部分に貼り付け、

エクセルに戻って Alt+F8で drawGraph を実行し、希望の形にならないでしょうか。

Sub drawGraph()
    Columns("A").Copy Columns("D")
    Columns("D").Sort Header:=xlNo, key1:=Range("D1"), order1:=xlAscending
    
    If Range("D2") = "" Then Exit Sub
    
    For i = Range("D1").End(xlDown).Row To 2 Step -1
        If Cells(i, "D") = Cells(i - 1, "D") Then
            Cells(i, "D") = ""
        End If
    Next
    Columns("D").Sort Header:=xlNo, key1:=Range("D1"), order1:=xlAscending

    Dim lastRow As Long
    lastRow = Range("D1").End(xlDown).Row
    Range("E1").Resize(lastRow, 1).FormulaR1C1 = "=COUNTIF(R1C1:R" & Range("A1").End(xlDown).Row & "C1,RC4)"
    Range("F1").Resize(lastRow, 1).FormulaR1C1 = "=RC[-1]/SUM(R1C4:R" & lastRow & "C4)"
    Range("F1").Resize(lastRow, 1).NumberFormatLocal = "0.0%"


    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range("F1").Resize(lastRow, 1)
    ActiveChart.ChartType = xlColumnClustered
End Sub

PHP の時刻に関しては下記をご参照ください。

http://php.benscom.com/manual/ja/ref.datetime.php

gmdateのサンプル

<?php
echo date("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
?>

あたりが参考にならないでしょうか。

id:esecua

Macなのでマクロは利用できないんです。

>PHP の時刻に関しては下記をご参照ください。

えーっと、タイムスタンプをExcel上で変更する方法です

2009/02/02 04:00:39
id:ls_10_5 No.2

回答回数91ベストアンサー獲得回数4

ポイント27pt

excelの方はよく分からないので、PHPの方だけお答えします。

gmtime()という関数は私のリファレンスでは見つけ出せなかったのですが、タイムスタンプを取得する関数として考えますと、

date()関数を使うのが良いと思います。

http://www.php.net/manual/ja/function.date.php

date('Y-m-d', gmtime())

といった形式でできると思います。

id:esecua

サンキューです。

2009/02/03 10:37:51
id:ls_10_5 No.3

回答回数91ベストアンサー獲得回数4

ポイント27pt

Excelの方も調べてみました。


FREQUENCYという関数が使えるようです。

http://xl-kobeya.seesaa.net/article/16258114.html


A1のセルからA10のセルまで、数値が入力されているものとして説明します。

別の場所、例えばC1のセルからC3のセルまで、1,2,3といった数字を縦に並べて入力しておいて、

D1からD3までのセルを選択し、D1のセルに

=FREQUENCY(A1:A10,C1:C3)

と入力して

Shift+Ctrl+Enter

を押します。

これで、D1からD3のセルに、それぞれの数字が何回出てきたかが表示されます。


これをパーセント表示にするには、E1のセルに

=D1/SUM(D$1:D$3)

と入力して、右下の点をドラッグすることでD1からD3のセルに同じ数式を入力します。


あとはこれをグラフにするだけです。

C1からC3のセルとE1からE3のセルを選択(Ctrlを押しながらだと複数のセルが選択できます)して、グラフウィザードを使ってください。

id:esecua

参考にさせていただきます。

2009/02/03 15:35:19
  • id:hiko3karasu
    Excel
    Y軸は各値のパーセンテージ。
    の意味がよくわかりません。
    どういう計算をするのでしょうか?
    X軸は1,2,3のときY軸の値は何になりますか?
  • id:ls_10_5
    2番目の回答に訂正があります。
    グラフを作るときは、E1からE3のセルだけ選択して、グラフウィザードを使ってください。
    そのままではY軸は小数表示になっていますが、グラフが完成した後にY軸を右クリックして「軸の書式設定」を選択、「表示形式」タブで「パーセンテージ」を選んでください。
  • id:Mook
    ls_10_5 さん、回答の際のご参考までに。

    http://hatenadiary.g.hatena.ne.jp/keyword/%E3%81%AF%E3%81%A6%E3%81%AA%E8%A8%98%E6%B3%95%E4%B8%80%E8%A6%A7
    http://hatenadiary.g.hatena.ne.jp/keyword/%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%82%84%E3%81%AF%E3%81%A6%E3%81%AA%E8%A8%98%E6%B3%95%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%EF%BC%88%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BCpre%E8%A8%98%E6%B3%95%EF%BC%89
  • id:ls_10_5
    Mookさん、ありがとうございます!
    とても参考になりました。
    これからこの書き方を使っていきたいと思います。
  • id:ls_10_5
    私の2つめの回答がこれに関するものです。
    ご覧ください。
  • id:esecua
    countif とか使えば出来るような気がしてきました。

    今のところ0ポイントです。
  • id:ls_10_5
    あと、質問の意図を誤解してお答えしてしまったようなので、詳しく伺いたいのですが、
    > PHPのgmtime()で発行されたタイムスタンプを 西暦-月-日 に変更する方法を教えて下さい。
    とありますが、タイムスタンプがセルに入っていて、それをExcelで変換したいのでしょうか?
  • id:Mook
    MACでしたか。お使いのEXCELのバージョンは何でしょうか。
    2002版でしたら、最後の3行を外したら動かないでしょうか。

    そこまで動けばF列のデータを選択して、グラフを挿入するだけなのですが。



    日付に関しては、現在のデータサンプルをあげてもらえますか?
  • id:esecua
    >タイムスタンプがセルに入っていて、それをExcelで変換したいのでしょうか?

    正にその通りです。

    1233446400 な感じです。
  • id:Mook
    実際に入っている数値のサンプルを記載いただけないでしょうか。
    上記の数値が、その例ですか?

    また、使用している関数は gmtime でしょうか。
    gmtime は時間情報を要素ごとに配列(Cでは構造体)にして返すものですから、
    それがセルに入っているという状況が、理解できません。

    もし time()関数の値が入っているのであれば、1900年起算の秒数ですから、
    A1に時間が入っていたら、B1に
    =A1/3600/24
    として、表示形式を日付にすれば日にちになるかと思います。
  • id:ls_10_5
    esecuaさん

    グラフの書き方に関しては、私の2つ目の回答に書いてあります。
    (実際excelでグラフまで作ってみました)
    是非ご覧ください。
  • id:ls_10_5
    esecuaさんへ

    私の投稿を閲覧していただけないでしょうか?
    良い内容だと思われなければ0ポイントにしていただいて構いませんので。
    折角方法を探して、自分でもExcel上でテストをして投稿しましたので、
    一度も見て頂けないのは残念でなりません。

    タイムスタンプをExcelで変換する方法に関しては思い当たるのですが、
    また書いても閲覧して頂けないと悲しいので、
    先の投稿が閲覧されたらコメントで書かせて頂こうと思います。
  • id:ls_10_5
    esecuaさん

    1233446400
    というタイムスタンプは、
    1939/1/31
    でよろしいでしょうか?
    試しにやってみたのですが、どうしても違うような気がして…

    もし合っていたら方法をお教えします。
    間違っていたら正しい日付をお教えください。
    何とかする方法を考えます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません