Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


392 / 500 ページ ←次へ | 前へ→

【5356】Re:シェア率の算出方法
質問  sakaiII  - 05/6/10(金) 21:41 -

引用なし
パスワード
   小僧さん
こんばんわ。
やってみましたが、
>デザインビューで見た時、「数量シェア%」のフィールドを
>Format([数量シェア%]*100,"0.00")
ここまではできなかったのです。デザインビューで開くと、SQL文だけです。
私の要領は悪かったかもしれません。
教えてください。よろしくお願いします。
・ツリー全体表示

【5355】Re:レコードの内容で新たな列に割り付ける
回答  小僧  - 05/6/10(金) 20:09 -

引用なし
パスワード
   ▼えるてそろ さん:
こんばんは。

DATE:05/06/08 07:13:20
METHOD:PROXY
SERVER:ns.xxxxx.jp
USER:192.168.7.7
CLIENTIP:192.168.7.7
SERVERIP:111.111.222.333
DOMAIN:www.yahoo.co.jp
PATH:mail_img/tuesdaaaaaaaaaaaaaaaaaaaaaaa
----------------------------------

こんな感じの元データで宜しければ

Sub 加工してから()
Dim FSO As Object
Dim TName As String '取込テーブル名
Dim RFile As Object
Dim RPath As String '元のファイルフルパス
Dim RName As String '元のファイル名
Dim WFile As Object
Dim I As Long
Dim L As String

  TName = "T_取り込み"
  RPath = "C:\temp"
  RName = "Log.txt"
  
  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set RFile = FSO.OpenTextFile(RPath & "\" & RName)
  Set WFile = FSO.CreateTextFile(RPath & "\temp.csv")
    WFile.WriteLine _ 
       "LOGDATE,LOGTIME,METHOD,SERVER," _
      & "USER,CLIENTIP,SERVERIP,DOMAIN,LOGPATH"
    
    Do Until RFile.AtEndOfStream
      For I = 1 To 9
        L = RFile.ReadLine
        
        Select Case I
          Case 1
            WFile.Write Mid(L, 6, 8) & "," & Mid(L, 15, 8) & ","
          Case 2, 3, 7
            WFile.Write Right(L, Len(L) - 7) & ","
          Case 4
            WFile.Write Chr(34) & Right(L, Len(L) - 5) & Chr(34) & ","
          Case 5, 6
            WFile.Write Chr(34) & Right(L, Len(L) - 9) & Chr(34) & ","
          Case 8
            WFile.WriteLine Right(L, Len(L) - 5)
        End Select
      Next
    Loop
    
  WFile.Close: Set WFile = Nothing
  RFile.Close: Set rdile = Nothing
  
  DoCmd.TransferText acImportDelim, , TName, RPath & "\temp.csv", True
  
  FSO.DeleteFile RPath & "\temp.csv"
  Set FSO = Nothing
End Sub

「DATE」「PATH」などは予約語なので名前を変えてあります。
外していたら申し訳ないです。
・ツリー全体表示

【5354】Re:レコードの内容で新たな列に割り付ける
質問  えるてそろ  - 05/6/10(金) 18:02 -

引用なし
パスワード
   ▼小僧 さん:
早速のご回答有難うございます。

>以下いくつか確認です。

>1) フィールドは「DAY」「ANODEkw」の様な形で、
>  データは「234」「abcd」という形で宜しいですか?
ここまで詳しく聞いていただいたら、
実際のデータを見ていただいたほうが良いかと思うので
内容は少し変えて貼り付けします。

<テーブルA>
F1        F2
DATE:        05/06/08 7:13:20
METHOD:        PROXY
SERVER:        ns.xxxxx.jp
USER:        192.168.7.7
CLIENTIP:        192.168.7.7
SERVERIP:        111.111.222.333
DOMAIN:        www.yahoo.co.jp
PATH:        mail_img/tuesdaaaaaaaaaaaaaaaaaaaaaaa
----------------------------------
:ずっと続く

<テーブルB>
F1    F2   F3    F4  F5   F6   F7   F8  F9
DATE:  TIME:  METHOD: 以降続く

:ずっと続く  7万件くらいのデータに改善できるはず

>2) 「DAY」の行で欲しいデータは
>  A:日付だけ
>  B:日付+時間
>  C:日付と時間を別フィールドで

出来れば、Cですと一番ありがたいです。

>3) データは必ず9の倍数で最後は「------------」で終わっていますか?

必ず、----で終わります。

お忙しいところ、わがままを申して申し訳ありませんが、
よろしくお願いいたします。
・ツリー全体表示

【5353】Re:レコードの内容で新たな列に割り付ける
発言  小僧  - 05/6/10(金) 15:46 -

引用なし
パスワード
   ▼えるてそろ さん:
こんにちは。

>実際のデータは9行で1レコードになっていて70万行ほどになります。

この情報が欲しかったんですよね。

>> 1) 取り込んでからクエリ等で加工する。
>>
>> 2) 取り込む際に加工しながら取込む。
>>
>> 3) 取り込む前に加工し、加工したテキストを読み込む。

当方が思いつく限り3通りの方法があると思われますが、
正直700,000レコードあるデータの処理をするのにどれが一番効率的かは
試してみないと解りません。

上記3つの手続きでしたらVBAで可能です。

以下いくつか確認です。

1) フィールドは「DAY」「ANODEkw」の様な形で、
  データは「234」「abcd」という形で宜しいですか?

2) 「DAY」の行で欲しいデータは
  A:日付だけ
  B:日付+時間
  C:日付と時間を別フィールドで

3) データは必ず9の倍数で最後は「------------」で終わっていますか?
・ツリー全体表示

【5352】ODBCにてデータをAccessにインポートした...
質問  質問疑問  - 05/6/10(金) 15:28 -

引用なし
パスワード
   ODBC経由にてデータをAccessにインポートした場合、
日付時間型のデータで、時間の項目のみ上手く表示できません。
時間が、2045/05/05のようにありえない日付で取り込まれます。
これは正しい表示(時間)にすることはできないのでしょうか?
どなたかご教示ください。よろしくお願いいたします。
・ツリー全体表示

【5351】Re:レコードの内容で新たな列に割り付ける
質問  えるてそろ  - 05/6/10(金) 15:16 -

引用なし
パスワード
   ▼小僧 さん:
早速の返信、ありがとうございました。

>他に「ID」フィールドとかあって
>テーブルA
>ID F1  F2
>1 AAA 123
>1 BBB あああ
>1 CCC 05/06/10
>2 AAA 456
>2 BBB いいい
>2 CCC 04/06/12
>ID AAA BBB   CCC
>1  123 あああ 05/06/10
>2  456 いいい 04/06/12
>
>なら理解できるのですが…。
>テーブルAの構造自体がちょっとおかしいので見直しをした方がよいかもしれません。
>通常は一つのフィールドに対して数値、文字、日付が入る事はないと思われます。

ご指摘有難うございました。
確かにそうなのですが、もう少し事情を説明させていただきますと
データは通信ログファイルで、時間ごとの通信の結果が
テキストになっております。
データ間の-----も実際にデータとして存在しています。

簡素化のため、略して説明しまして 申し訳ありませんでした。
実際のデータは9行で1レコードになっていて70万行ほどになります。
なんとかして、1行1レコードにして分析できるようにしたいのです。

何か良い知恵がありましたら、よろしくお願いいたします。
DAY:05/06/11 23:00
ANODEkw:234
BNODEkw:123
CNODEkw:222
AETC:abcd
BETC:cd
CETC:
DETC:
------------
DAY:05/06/11 23:05
ANODEkw:
:
:(続く)
・ツリー全体表示

【5350】Re:レコードの内容で新たな列に割り付ける
発言  小僧  - 05/6/10(金) 14:16 -

引用なし
パスワード
   ▼えるてそろ さん:
こんにちは。

ご提示の内容ですと「123」「あいう」「05/06/10」の関連性が
みえてきません。
他に「ID」フィールドとかあって

テーブルA
ID F1  F2
1 AAA 123
1 BBB あああ
1 CCC 05/06/10
2 AAA 456
2 BBB いいい
2 CCC 04/06/12

ID AAA BBB   CCC
1  123 あああ 05/06/10
2  456 いいい 04/06/12

なら理解できるのですが…。

テーブルAの構造自体がちょっとおかしいので見直しをした方がよいかもしれません。
通常は一つのフィールドに対して数値、文字、日付が入る事はないと思われます。

※フィールド名に半角カタカナを用いるのは極力避けましょう。
・ツリー全体表示

【5349】レコードの内容で新たな列に割り付ける
質問  えるてそろ  - 05/6/10(金) 10:47 -

引用なし
パスワード
   初めて投稿します。全くの初心者なのですが、質問してもいいでしょうか。
テーブルAがあるのですが、データ分析の為
テーブルBのような形にしたいのですが、
良い手法をご教示ください。
よろしくお願いします。

テーブルA
フィールド1   フィールド2
AAA     123
BBB     あああ
CCC     05/06/10
---
AAA     456
BBB     いいい
CCC     04/06/12
---
:続く


テーブルB
AAA     BBB     CCC (フィールド名になります)
123     あああ   05/06/10
456     いいい   04/06/12
:      :      :
:      :      :
・ツリー全体表示

【5348】Re:他のフィールドとの比較条件で抽出する...
発言  クロ  - 05/6/10(金) 8:14 -

引用なし
パスワード
   前レスはチョットきつかったので書き直し...

WHERE句はクエリでデザインしてSQLビューに切り替えると
どのように書けばいいか分かります。

ご自分でクエリをデザインし、思ったレコードが抽出できたら
SQLビューにして確認してみてください。
・ツリー全体表示

【5347】他のフィールドとの比較条件で抽出する方法
質問  kuri  - 05/6/9(木) 19:14 -

引用なし
パスワード
   早速つまづきました。
期間で抽出する方法は理解できたのですが、フィールドAには予定日、フィールドBには実施日のデータがあります。
予定日と今日の日付を比較し、予定日が今日より前で、かつ実績日のデータが無いデータを抽出したいのですが、どうするのでしょうか?
<例>
今日の日付:6/10とします。

フィールド フィールド
予定日    実施日
 2005/6/4  2005/6/3
 2005/6/5       ←抽出対象
 2005/6/6  2005/6/3
 2005/6/7  2005/6/3

strSQLWhereに入る句は
予定日 <=date() AND 実施日 Null という感じでしょうか?

上記の条件にプラスして期間の抽出も行おうとしていますが、STEP1としてこの問題を
解決したいと考えています。
・ツリー全体表示

【5346】PrtDevMode
質問  DOM  - 05/6/9(木) 17:55 -

引用なし
パスワード
   こんにちは

PrtDevModeで印刷前にレポートにプリンタの設定をしています。
2つのレポートがあり、最初に印刷されるときに印刷ダイアログを呼び、
指定した枚数分ずつ印刷したいのですが、
PrtDevModeの設定がレポート1にしか効きません。
(PrtDevModeで印刷ダイアログで設定した内容を2枚目以降の印刷にも
引き継がせようとしています。)
設定して引き継がせようとしている項目は、プリンタ名と給紙装置です。
以下コードです。(長くてごめんなさい。

Private Sub 印刷_Click()

Private Type str_DEVMODE
  RGB As String * 94
End Type

Private Type type_DEVMODE

  strDeviceName As String * 16
  intSpecVersion As Integer
  intDriverVersion As Integer
  intSize As Integer
  intDriverExtra As Integer
  lngFields As Long
  intOrientation As Integer
  intPaperSize As Integer
  intPaperLength As Integer
  intPaperWidth As Integer
  intScale As Integer
  intCopies As Integer
  intDefaultSource As Integer
  intPrintQuality As Integer
  intColor As Integer
  intDuplex As Integer
  intResolution As Integer
  intTTOption As Integer
  intCollate As Integer
  strFormName As String * 16
  lngPad As Long
  lngBits As Long
  lngPW As Long
  lngPH As Long
  lngDFI As Long
  lngDFr As Long
  
End Type

  Const DM_ORIENTATION = &H1
  
  Dim insatusuu As Integer
  Dim DevString As str_DEVMODE
  Dim Dm As type_DEVMODE
  Dim strDevModeExtra As String
  Dim rpt As Report
  Dim DevString2 As str_DEVMODE
  Dim Dm2 As type_DEVMODE
  Dim strDevModeExtra2 As String
  Dim rpt2 As Report
  
  For i = 1 To insatusuu
   
  If i = 1 Then
      
   DoCmd.OpenReport "レポート1", acViewPreview, , "主キー'" & rs![主キー& "'"
      DoCmd.RunCommand acCmdPrint
      
      '*****************レポート設定"レポート1"*********************
      
      DoCmd.OpenReport "レポート1", acDesign
      
      Set rpt = Reports("レポート1")
      
      If Not IsNull(rpt.PrtDevMode) Then

        strDevModeExtra = rpt.PrtDevMode
        
        DevString.RGB = strDevModeExtra
        
        LSet Dm = DevString
        
        Dm.lngFields = Dm.lngFields Or DM_ORIENTATION
        Dm.strDeviceName = Dm.strDeviceName
        Dm.intDefaultSource = Dm.intDefaultSource
        
        'プロパティの更新を行います。
        LSet DevString = Dm
        
        Mid(strDevModeExtra, 1, 94) = DevString.RGB

        rpt.PrtDevMode = strDevModeExtra

      End If
      
      DoCmd.Close acReport, "レポート1", acSaveYes
      
      '******************レポート設定"レポート2"********************

      DoCmd.OpenReport "レポート2", acDesign

      Set rpt2 = Reports("レポート2")

      If Not IsNull(rpt2.PrtDevMode) Then

        strDevModeExtra2 = rpt2.PrtDevMode
        DevString2.RGB = strDevModeExtra2
        
        LSet Dm2 = DevString2
        
        Dm2.lngFields = Dm2.lngFields Or DM_ORIENTATION
        Dm2.strDeviceName = Dm.strDeviceName
        Dm2.intDefaultSource = Dm.intDefaultSource

        LSet DevString2 = Dm2

        Mid(strDevModeExtra2, 1, 94) = DevString2.RGB

        rpt2.PrtDevMode = strDevModeExtra2

      End If
      
      DoCmd.Close acReport, "レポート2", acSaveYes
       '************************************************************
     Else
      
      DoCmd.OpenReport "レポート1", , , "主キー='" & rs![主キー] & "'"
        
     End If
     
      DoCmd.OpenReport "レポート2", , , "主キー='" & rs![主キー] & "'"
      
    Next i
End Sub

レポート1,2それぞれ2枚ずつ印刷しようとしたときに、レポート1だけ
ダイアログで設定した内容(プリンタ,給紙装置)を引き継いで、印刷されます。

レポート2にも引き継がれるようにするには、どのようにコードを書けばいいの
でしょうか?分かりづらいコードで申し訳ありませんが、
どうかよろしくお願いします。
・ツリー全体表示

【5345】Re:VBAでクエリ_左に寄ります
お礼  kuri E-MAIL  - 05/6/9(木) 15:41 -

引用なし
パスワード
   ▼クロ さん:
>見ました。なにゆえにF_998上にコントロールを配置してないのでしょうか?
>コントロールを配置していなければ見ることはできませんよ。
>
>また、サンプルだからかもしれませんが、デフォルトで入っている日付の
>「受付日」レコードが無いので表示されませんでした。
>仮に今日(2005/06/09)のレコードを追加したら見えましたよ。
お手数かけました。これから先ほどのテーブルに抽出条件を追加し、より複雑になっていきます。また不明な点が出たときは宜しくお願いいたします。もう嫌になりましたか?
本当にすみませんでした。そして、ありがとうございました。
・ツリー全体表示

【5344】Re:VBAでクエリ_左に寄ります
回答  クロ  - 05/6/9(木) 15:20 -

引用なし
パスワード
   見ました。なにゆえにF_998上にコントロールを配置してないのでしょうか?
コントロールを配置していなければ見ることはできませんよ。

また、サンプルだからかもしれませんが、デフォルトで入っている日付の
「受付日」レコードが無いので表示されませんでした。
仮に今日(2005/06/09)のレコードを追加したら見えましたよ。
・ツリー全体表示

【5343】Re:VBAでクエリ_左に寄ります
発言  kuri E-MAIL  - 05/6/9(木) 15:07 -

引用なし
パスワード
   ▼クロ さん:
>他所のBBSのアップローダですがお借りして、現象のでる
>mdbをアップしてもらえますか?
>http://www.penhagi.com/cgi-b/bbs/bbs.cgi
>
>※個人レコードなどは別のものに変更してください。
アップしました。大変お手数をかけて申し訳ありません。
・ツリー全体表示

【5342】Re:VBAでクエリ_左に寄ります
発言  クロ  - 05/6/9(木) 12:45 -

引用なし
パスワード
   他所のBBSのアップローダですがお借りして、現象のでる
mdbをアップしてもらえますか?
http://www.penhagi.com/cgi-b/bbs/bbs.cgi

※個人レコードなどは別のものに変更してください。
・ツリー全体表示

【5341】Re:VBAでクエリ_左に寄ります
質問  kuri E-MAIL  - 05/6/9(木) 12:27 -

引用なし
パスワード
   ▼クロ さん:

>検索対象のテーブルが「T_情報」ならそれを指定してください。
>※F_999のレコートソースは「T_情報」でしたよね?
設定後の結果は、表示なしでレコード数は抽出後の数になっています。前と一緒ですね。
抽出はしてるのに、結果が表示されない。なんでだろう・・・。
・ツリー全体表示

【5340】Re:VBAでクエリ_左に寄ります
回答  クロ  - 05/6/9(木) 10:41 -

引用なし
パスワード
   ▼kuri さん:
>F_998は結果を表示するだけに使用するフォームです。プロパティのレコードソース
>に検索元のテーブルを設定するのでしょうか?

検索対象のテーブルが「T_情報」ならそれを指定してください。
※F_999のレコートソースは「T_情報」でしたよね?
・ツリー全体表示

【5339】Re:VBAでクエリ_左に寄ります
質問  kuri E-MAIL  - 05/6/9(木) 10:37 -

引用なし
パスワード
   ▼クロ さん:
>▼kuri さん:
>F_999フォームのプロパティで何かをデフォルトから弄っているような...
>プロパティをチェックするか、F_999フォームを作り直してみてはどうでしょう
作り直して実行しました。F_999→F_998
DoCmd.OpenForm "F_998", acNormal, "", "設計受付年月日 between #2000/06/09# and #2005/06/09#"
エラーメッセージ
実行時エラー”2491”
フォームまたはレポートがテーブルまたはクエリを基に作成されていないのでこの
アクションまたはメソッドは無効です。
が表示されました。
F_998は結果を表示するだけに使用するフォームです。プロパティのレコードソース
に検索元のテーブルを設定するのでしょうか?
・ツリー全体表示

【5338】Re:VBAでクエリ_左に寄ります
回答  クロ  - 05/6/9(木) 10:14 -

引用なし
パスワード
   ▼kuri さん:
F_999フォームのプロパティで何かをデフォルトから弄っているような...
プロパティをチェックするか、F_999フォームを作り直してみてはどうでしょうか?
・ツリー全体表示

【5337】Re:VBAでクエリ_左に寄ります
発言  T  - 05/6/9(木) 10:11 -

引用なし
パスワード
   ▼kuri さん:
>▼クロ さん:
>>▼kuri さん:
>>DoCmd.OpenForm "F_999", acNormal,,"設計受付年月日 between #2005/06/09# and #2005/06/09#"
>>
>>だけでやるとどうなります?
>表示はされないのですが、左下のレコード件数総数は、抽出後の件数となりました。
>自分では意図しない設定をしてるのかな?

表示されない設定になっているとか?
細かい設定はどうなっているかわからないけど。
・ツリー全体表示

392 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084740
(SS)C-BOARD v3.8 is Free