[[20040910100823]] 『比較対象無しからの集計』(プッチョ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『比較対象無しからの集計』(プッチョ)

お世話になります。業務で行き詰まってしまったので質問させてください。

専用ツールで「アクセスログ.log」というファイルが出力されます。
そのログファイルをエクセルで開くと以下のようになっています。

 ************アクセスログ.log**************
        A         B              C        ......
 1  2004/08/30 11:20:12	YamadaTaro
 2  2004/08/30 11:25:15	TanakaHiroshi
 3  2004/08/30 11:28:15	EndoTakeshi
 4  2004/08/30 11:30:32	ShimizuNaoko
 5  2004/08/30 11:49:52	MurataAkio
 6  2004/08/30 11:52:52	MurataAkio
 7  2004/08/30 12:02:52	MurataAkio
 8  2004/08/30 13:49:52	TanakaHiroshi
 .
 .
 .

 *****************************************
実際のアクセスログ.logファイルはタブ区切りとなっております。

この形式のファイルの中身を以下の二つのグラフとしてエクセル上に出力したいのです。

@ユーザー名ごとのアクセス日時

Aユーザー名ごとのアクセス延べ回数

ユーザ名のリストはありません、アクセスログファイルを出力する度に毎回違うものです。
その為毎回ログファイルに含まれているユーザ名をチェックして誰が何回アクセスしたかを調べる必要があると
思うのですがその方法がわかりません。

できればコマンドボタンのクリックだけで完結させたいので以下の流れを考えております。

@コーディング済みのテンプレートを作成する。

Aテンプレートからログファイルを開く。

Bコマンドボタンをクリックしてグラフ表示。

DB(アクセス等)を使えない環境で、尚且つユーザ名の元ネタ(リスト)が無い状況でVBAとエクセルだけで
上記を実現させる事は可能でしょうか?

説明が下手で申し訳ないです。何か情報が足りない場合はお答えいたしますので
みなさんよろしくお願いいたします。


 ピポれば簡単に出来ると思います。
 マクロの記録を行われたら如何でしょうか。
 あとは記録したマクロをボタンに登録する。(ろん)


ろんさんお返事ありがとうございます。
おっしゃる通りピポットテーブルで望みどおりの結果が求められました。

しかし、マクロを記録したコマンドボタンをテンプレートとして保存したとして、
ファイル名が違う別のアクセスログ.logをそのテンプレート上で開く事は可能でしょうか?

(プッチョ)


 getopenfilenameメソッドを利用しては如何ですか?

  (INA)


 ご参考になりますかどうか・・・
 私も似たような事を毎日行なっているのですが、記録マクロだけのブックを1つ作っています。
 そして、毎日DLしてきたデータを決まった名前で決まったフォルダに格納しています。
 マクロの記録は、そのファイルを開くところから始めて、結果が得られるところまでで終わっています。
 なので、結果が得られたら別名として保存し、記録マクロのブック自体は更新しません。
 (ろん)


(INA)さん、(ろん)さん ご指導ありがとうございます。

(INA)さん、

教えていただいたgetopenfilenameメソッドで目的のログファイルを呼び出すと、それは新規ブックとして扱われてしまい、ピポットテーブル等のマクロを記述したコマンドボタンが使用できませんでした。

(ろん)さん、

私の場合、毎度受け取るファイル形式は同じなのでこれさえできればこの仕事を完結できるんですよね^^頑張ってみます。

このスレッドが生きてるうちに解決したいです。頑張ります〜。


 作られたマクロをブック上のボタンではなく、ツールバーのボタンに登録して、
 アクティブなブックで実行できるようにしておけば良いのでは。
 (川野鮎太郎)


(川野鮎太郎)さん、お返事ありがとうございます。
・ツールバーのボタンに登録して
との事ですが、具体的にいうとどういうことなのでしょうか?

せっかくヒントをいただいているのに前に進めなくて申し訳ないです。

(プッチョ)


 たとえば、ボタンを作る「だけ」だったら。
 こんな感じのを以前INAさんが 作成されてました・・・以下引用+ちょこっと変名

 Sub ボタン作成()
 Dim BarName As CommandBar
 Dim ComName As String

    ComName = "myButton"

    For Each BarName In Application.CommandBars
        If BarName.Name = ComName Then
            Application.CommandBars(ComName).Delete
            Exit For
        End If
    Next

    With Application.CommandBars.Add()
        .Name = ComName
        .Position = msoBarTop
        .Visible = True
    End With

    With Application.CommandBars(ComName).Controls.Add()
        .Caption = "push!"
        .OnAction = "myPivot"
        .Style = msoButtonCaption
    End With

 End Sub

 きっと、この最後の「End Sub」の後に、
 Sub myPivot() として、記録マクロのコードをくっつければ
 動くようになります。。。?
 (ポチ)


 どのような仕様なのか、正確には理解できていませんが、
 そんなに難しいことではないような気がします。

 >getopenfilenameメソッドで目的のログファイルを呼び出すと、
 >それは新規ブックとして扱われてしまい、
 >ピポットテーブル等のマクロを記述したコマンドボタンが使用できませんでした。

 どのような使い方をしたのでしょうか?

 「ピポットテーブル等のマクロを記述したコマンドボタン」を押したら、
 getopenfilenameメソッドで、ログファイルのパスを取得すればよいと思いますけど?

  (INA)


 (ポチ)さん、(INA)さん、ご指導ありがとうございます。

(ポチ)さん、現在ボタンはセル上に貼り付けてある状態です。そのマクロが記録されたボタンをクリックしてログファイルを呼び出し・・・ここで詰まっております。

(INA)さん、私は教えていただいたメソッドをファイル呼び出し用として使用しておりました。

 Private Sub CommandButton2_Click()
    Dim OpenFileName As String
    OpenFileName = Application.GetOpenFilename("アクセスログファイル,*.log")
    If OpenFileName <> "False" Then
        Workbooks.Open OpenFileName
    End If
 これ以下にピポットテーブル作成用のマクロが記述してあります。

ここでファイルを開くと新たなブックとしてアクセスログファイルが表示されてしまいます。
テンプレートとして用意したボタン付のこのブック上にアクセスログファイルを呼び出す事は可能でしょうか?


 上記のものを試したところ、選んだログファイルが開くようになってますが、
 最後のEnd Ifのあとに、作ったマクロを記述してやるだけで、ボタンを押す必要もないような気がしますが。
 作られたマクロを提示してもらったほうが確実かな・・・(^_^A;
 (川野鮎太郎)


(川野鮎太郎)さんご指導ありがとうございます。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2004/9/10 ユーザー名 : Administrator
'

'

    ActiveWindow.WindowState = xlNormal
    ActiveWindow.WindowState = xlMaximized
    Rows("1:1").Select                ・・・・・ここから
    Selection.Insert Shift:=xlDown
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "アクセス日時"
    ActiveCell.Characters(5, 2).PhoneticCharacters = "ニチジ"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "ユーザ名"
    ActiveCell.Characters(4, 1).PhoneticCharacters = "メイ"
    Range("A2").Select
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Shukei!R1C1:R369C2").CreatePivotTable TableDestination:="", TableName:= _
        "ピボットテーブル1"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False
    ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="ユーザ名"
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("ユーザ名").Orientation = _
        xlDataField
    Charts.Add                     ・・・・・ここまで
    ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A3")
    ActiveChart.Location Where:=xlLocationAsNewSheet
End Sub

こんな感じになっております。

まだ諦めてません、、、お手数おかけして大変申し訳ございませんが、何卒よろしくお願いいたします。

(プッチョ)


 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Shukei!R1C1:R369C2").CreatePivotTable TableDestination:="", TableName:= _
        "ピボットテーブル1"
 ここでShukeiと言う名前のシートのデータを扱うようになっているからのようです。
 Shukei!の文字を削除するだけで動くようです。
 とりあえずここだけ(^_^A;
 ここから、ここまでと書いたものを先ほどのコマンドボタン2のEnd Ifのあとに貼って試したらどうなりますか。
 (川野鮎太郎)


(川野鮎太郎)さん、ご指導感謝します。

こんな感じで貼り付けてみました。

Private Sub CommandButton2_Click()

    Dim OpenFileName As String
    OpenFileName = Application.GetOpenFilename("アクセスログファイル,*.log")
    If OpenFileName <> "False" Then
        Workbooks.Open OpenFileName
    End If
 End Sub                 ・・・・不要

 Private Sub CommandButton1_Click()   ・・・・不要

    Rows("1:1").Select
    Selection.Insert Shift:=xlDown
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "アクセス日時"
    ActiveCell.Characters(5, 2).PhoneticCharacters = "ニチジ"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "ユーザ名"
    ActiveCell.Characters(4, 1).PhoneticCharacters = "メイ"
    Range("A2").Select
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "R1C1:R369C2").CreatePivotTable TableDestination:="", TableName:= _
        "ピボットテーブル1"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False
    ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="ユーザ名"
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("ユーザ名").Orientation = _
        xlDataField
    Charts.Add

End Sub

コマンドボタンを設置したブックにシートが二つ増え、ピポットグラフとピポットテーブルが表示されました。

しかし、値が何も入って居ない状態です。
コマンドボタン2でファイルを開いた時には「Shukei」というファイルが新規で開かれている状態です。

何度も申し訳ございません。これは、「Shukei」というファイルを指定していないからということでしょうか。


 ボタンを分ける必要はないと思いますけど・・? (INA)

 ありゃりゃ(^_^A;
 INAさんの言われるように、分けるのではなく、上記の不要の部分を消してください。
 (川野鮎太郎)

 ----
(INA)さん、(川野鮎太郎)さん、ご指導ありがとうございます。
ボタンがひとつの状態で上記を実行すると
実行時エラー'1004':
と表示されてしまって、ためしに二つに分けたら動いたので、、、
失礼しました。少々お待ちください。。

(プッチョ)


お待たせして申し訳ございません。
やはり上記のエラーが表示されてしまいます。

「デバック」をクリックすると
Rows("1:1").Select←ここが怒られています。
(プッチョ)


 なぜそんなとこで怒られるのでしょう。 蹴り返してやりましょう┗┐ヽ(・∀・ )ノキック!
 最初にマクロを記録したブックのボタンに以下のマクロを登録して再度試してみてください。
 Sub Test()'←←←←@
    Dim OpenFileName As String
    OpenFileName = Application.GetOpenFilename("アクセスログファイル,*.log")
    If OpenFileName <> "False" Then
        Workbooks.Open OpenFileName
    End If

    Rows("1:1").Insert Shift:=xlDown
    Range("A1").FormulaR1C1 = "アクセス日時"
    ActiveCell.Characters(5, 2).PhoneticCharacters = "ニチジ"
    Range("B1").FormulaR1C1 = "ユーザ名"
    ActiveCell.Characters(4, 1).PhoneticCharacters = "メイ"
    Range("A2").Select
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "R1C1:R369C2").CreatePivotTable TableDestination:="", TableName:= _
        "ピボットテーブル1"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False
    ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="ユーザ名"
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("ユーザ名").Orientation = _
        xlDataField
    Charts.Add
 End Sub
 (川野鮎太郎)


早速のお返事本当にありがたいです。
質問したいのですが上記のソースに以下の矢印をつけてみました。

←←←←@ これはSub Test()をプライベートサブコマンドボタンクリックに変えるのでしょうか?

←←←←A これはエクセル形式のファイルしか呼び出せないようですが、これでよろしいのでしょうか?

普通こんな質問はエンドレスになりそうで面倒だと思うところお付き合いいただいてありがたく思います。

(プッチョ)


追記です。ファイルを呼び出すダイアログボックスでエクセルファイルしか選択できない為、

キャンセルボタンをクリックすると、確かにシートは二つ増えます。

(プッチョ)


 あら_/ ̄|○ il||li間違ってました。
 修正しておきましたので、そのまますべてを貼り付けて試してください。
 @は変えても変えなくても結果は同じはずです。(多分
 (川野鮎太郎)

 (*'ω'*)......ん? 値が何も入ってない状態って、開いたlogファイルは最初の例のような、
        A         B              C        ......
 1  2004/08/30 11:20:12	YamadaTaro
 2  2004/08/30 11:25:15	TanakaHiroshi
 であれば、上記マクロは月日と時間だけのグラフですよね。

  Sub Test2()
    Dim OpenFileName As String

    OpenFileName = Application.GetOpenFilename("アクセスログファイル,*.log")
    If OpenFileName <> "False" Then
        Workbooks.Open OpenFileName
    End If

    ActiveWindow.WindowState = xlMaximized
    Rows("1:1").Insert Shift:=xlDown
    Range("B1") = "アクセス日時"
    Range("B1").Characters(5, 2).PhoneticCharacters = "ニチジ"
    Range("C1") = "ユーザ名"
    Range("C1").Characters(4, 1).PhoneticCharacters = "メイ"
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "R1C2:R65534C3").CreatePivotTable TableDestination:="", TableName:= _
        "ピボットテーブル1"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(1, 1)
    ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False
    ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="ユーザ名"
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("ユーザ名").Orientation = _
        xlDataField
    Charts.Add

 End Sub
 こちらにすれば、名前とアクセス件数のグラフになると思いますが。
 (川野鮎太郎)

衝突しました。

(川野鮎太郎)さん、お手数をおかけしております。

上記、編集していただいたソースを貼り付けたところ
やはり、エラーで落ちてしまいます。。

申し訳ないです。落ちた場所等、収集して報告致します。
仕事で席を外させていただきます。対面式に近い形でお付き合いいただいているのに
大変申し訳ないです。(プッチョ)

尚、この事象は衝突よりひとつ前の事象です。


 う〜ん(/-_-\)なぜ落ちるのかわかりませんね・・・。
 やはりここは、達人にお任せかな(^_^A;
 (_ _ ;)尸"バトンタッチ・・・
 (川野鮎太郎)


 >やはり、エラーで落ちてしまいます。。
 どの行で、何エラーでしょうか?

 わたしもピボットテーブルなんて1回も使ったこと無いのでよくわかりません。

 (_ _ ;)尸"バトンタッチ・・・(パクリ)

  (INA)

 INAさんがタッチしちゃ(;`O´)oダメ〜!!        (^_^A;
 >実行時エラー'1004':
 >やはり上記のエラーが表示されてしまいます。 
 >デバック」をクリックすると Rows("1:1").Select←ここが怒られています。 
 らしいです。m(._.)m ペコッ
 (川野鮎太郎)

 Rows("1:1").Select ←ここということは、logファイルの形式が何か特別なんでしょうか。
 (川野鮎太郎)

 もしかして・・・ 何回も試しているので、ピボットテーブルを作った後のシートで試していませんか?
 ボタンの登録してあるブック以外はすべて閉じて、上記のTest1またはTest2を実行してみてください。
http://support.microsoft.com/default.aspx?scid=kb;JA;832166&Product=xlw2kINT
 (川野鮎太郎)

 あたしゃ、達人でもなんでもないけど、
 >ためしに二つに分けたら動いたので、、、
 だから、開いた方がアクティブになってるだけじゃないの??
 >Rows("1:1").Select 
 を、ちゃんとエクセル君に教えてあげればいいんでないの???v(=∩_∩=)v
(夏目雅子似)


 なるほど。動きました。 (ThisWorkbook.Activate追加)
 夏目雅子似さんどうも有り難う御座いました。 
 (INA) 

 w(☆o◎)wどっひゃ〜〜〜!!!!
INAさんから、ほめられちまったぁ〜〜感激v(=∩_∩=)v
(夏目雅子似)  
  

みなさんお力を貸していただき(ほとんどやっていただきましたが。。)ありがとうございます。

気になって自分のデスクを覗きにきてしまいました。今は急に手が離せない仕事が入ってしまい、

試す事ができません。またお邪魔します。本当に感謝しています。
(プッチョ)


 (*'ω'*)......ん?開いた方がアクティブじゃないといけないでしょ・・・
 あくまでlogファイルを開いて、開いたファイルをピボットでグラフ化するんじゃないの?(^_^A;
 もし違うなら、σ(^_^;)は最初から全然違うこと言ってことになるし_/ ̄|○ il||li
 (川野鮎太郎)

 っていうかぁ、、、1つの時はいいけど、二つになったら、、エクセル君的には、、
「どっちなの?はっきりして!!」って感じじゃなぁ〜〜いのv(=∩_∩=)v
(夏目雅子似)

 う〜ん(/-_-\) まだ理解できない_/ ̄|○ il||li
 Workbooks.Open OpenFileNameで開いたlogファイルが必ずアクティブになりますよね・・。
 INAさんも動きましたってことは・・・σ(^_^;)のだけ変なの?_/ ̄|○ il||li
 それともやっぱり大きな勘違いしてるのかな(ノ_・。)
 (川野鮎太郎)

 わたしもそのように考えていたのですが、
 logファイルがアクティブだと、 ActiveWorkbook.PivotCaches.Add  で 
 エラーになりました。
 なので、夏目雅子似さんのアドバイスどおりマクロブックを
 アクティブにしたところ、動作しました。

 ピボット使わないから、何故かは気にしていません。

  (INA) 

 衝突しましたぁ、、
うぅ〜〜ん、、ごめんなさいねm(__)m
私は、全然試してないんだけどね(^^;; ヒヤアセ
でも、コードは1つで開いた方を操作するの??
それならなおのこと、
With ○○
.Rows("1:1").Select 
End With
とかしなきゃいけないんじゃないの???
↑
かなり適当です。。混乱させちゃったら、ごめんさいね。m(__)m
でも、分けたら動くってことは、、多分そう言う事だと思いますよ。←感???
(夏目雅子似)

 あっ、それとも、いきなり
Selectだからかもよ???先に、もう少し親の○○からSelectしていけば
いいんでないのかな???物事には順番てのがあるから、、
特にエクセル君は順番にはうるさくて時々機嫌が悪くなるみたいだから。。。(感)
ちょっと、これ以上は、混乱しても悪いし、控えておきます。
それでは、たいさぁ〜〜ん!!(^-^)ノ~~またね☆’.・.・:★’.・.・:☆’.・.・:★
(夏目雅子似)

 ?(゜_。)?(。_゜)? チンプンカンプン
 少し整理させてください。
 プッチョさんは、初めはlogファイルを開かずにマクロを登録したブックをテンプレートとして使いたかったんですよね。
 でも方法が判らずか何かで Workbooks.Open OpenFileName で一度開いてるんですよね。
 >ここでファイルを開くと新たなブックとしてアクセスログファイルが表示されてしまいます。
 >テンプレートとして用意したボタン付のこのブック上にアクセスログファイルを呼び出す事は可能でしょうか?
 だからまだlogファイルを開かずにマクロのブックにデータを呼び込むことは出来てないはずですよね。

 だからコマンドボタンをふたつに分けると
 >コマンドボタンを設置したブックにシートが二つ増え、ピポットグラフとピポットテーブルが表示されました。
 >しかし、値が何も入って居ない状態です。
 テンプレートのブックでマクロを実行してるんだから、データは何も無いのにピボットテーブルと
 ピボットグラフのシートがふたつ増えて中身は無いとなるのは当然ですよね。

 ここまでは合ってますか?(^_^A; INAさんの言われるThisWorkbook.Activateを入れるとこれと同じ状態になります。
                 ~~~~~~~大変すいません、さんが抜けていました。m(._.)m本当にごめんなさい。
 だから私は、ふたつのマクロを合成したものを提示して、開いたlogファイルにピボットテーブルとグラフを作るようにしてるんです。
 ということで、以下がエラーになるのがわからないのです。

    Workbooks.Open OpenFileName   ・・・・・ここでlogファイルが開いてアクティブになる。
    End If

    ActiveWindow.WindowState = xlMaximized
    Rows("1:1").Insert Shift:=xlDown ・・・・そのままlogファイルの1行目に行を挿入
 私の方では夏目さんが言われるように、開いたブックをアクティブに指定しなくてもちゃんと動作してるんですよ_/ ̄|○ il||li
 どこか大きな勘違いがありますでしょうか(ノ_・。)
 (川野鮎太郎)

お世話になっておりますプッチョです。

私が席を外してから(外しすぎデスm(_ _)m)私の説明不足により皆さんに大変なご迷惑をおかけしてしまいました。

まず、それをお詫びさせてください。申し訳ございませんでした。

さて、この度の件なのですが、あれ以来本件を検証する時間がございません。

本日業務終了後に皆さんのありがたいレスを参考に再度作成に頑張ってみます。

せっかくたくさんのアドバイスをいただいたのに、応えられず申し訳ない気持ちです。

裏切らないように精進いたしますので今後ともよろしくお願いいたします。


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.