Access VBA質問箱 IV

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

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


1508 / 2272 ツリー ←次へ | 前へ→

【6815】特定の行をインポートするには にしもり 05/11/15(火) 10:37 質問[未読]
【6820】Re:特定の行をインポートするには 小僧 05/11/15(火) 13:40 回答[未読]
【6823】Re:特定の行をインポートするには にしもり 05/11/15(火) 16:35 お礼[未読]
【6825】Re:特定の行をインポートするには にしもり 05/11/16(水) 11:37 質問[未読]
【6826】Re:特定の行をインポートするには 小僧 05/11/16(水) 13:00 発言[未読]
【6827】Re:特定の行をインポートするには にしもり 05/11/16(水) 13:48 お礼[未読]

【6815】特定の行をインポートするには
質問  にしもり  - 05/11/15(火) 10:37 -

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

AccessにインポートしたいExcelがあります。
1行目はブランクで不要、
2行目はブランクで不要、
3行目は社員コード、組織名、職名、氏名、1、2、3・・・31と日付が入っており、
4行目は曜日が入っているが不要、
5行目以降に実データが入っています。

1、2、4行目はインポートせず、3行名を見出しに、また5行目以降をすべてインポートしたい場合どのようにモジュールを作成すればよいでしょうか?
どなたかよろしくお願いいたします。

【6820】Re:特定の行をインポートするには
回答  小僧  - 05/11/15(火) 13:40 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは。

[#4871]2行目からインポートしたい

にもありましたが、取り込み先の Excel の作成が他部署ですと
向こうの都合に合わせたフォーマットにされてしまいがちですよね…。

といった愚痴をなくすため(?)に汎用のコードを組んでみました。

Sub 特定行を削除してExcelコピー()
'要参照 Microsoft Excel x.x Object Library
Dim xlsApp As New Excel.Application
Dim xlsWkb As Excel.Workbook
Dim xlsSht As Excel.Worksheet
Dim xName As String
Dim sName As String
Dim Fuyo() As Variant
Dim strDel As String
Dim i As Long

  xName = "C:\test.xls"
  sName = "Sheet1"
  
'不要行をセット
  Fuyo = Array(1, 2, 4)
  
  For i = 0 To UBound(Fuyo, 1)
    strDel = strDel & "," & Fuyo(i) & ":" & Fuyo(i)
  Next
    strDel = MID(strDel, 2)

    xlsApp.Visible = True
  Set xlsWkb = xlsApp.Workbooks.Open(xName)
  Set xlsSht = xlsWkb.Sheets(sName)
    xlsSht.Range(strDel).Delete xlUp
    xlsWkb.SaveAs CurrentProject.Path & "\temp.xls"
  Set xlsSht = Nothing
    xlsWkb.Close False: Set xlsWkb = Nothing
    xlsApp.Quit: Set xlsApp = Nothing
End Sub

変数 Fuyo で定義された行を削ったファイルが
mdb と同じフォルダに「temp.xls」という名前で作成されるかと思います。

あとはこのファイルを TransferSpreadsheet メソッドで取り込めますよね。

※ ファイルの重複チェックや存在チェックなどは考慮しておりません。
  色々過去ログ等を参考にされてみて下さい。

【6823】Re:特定の行をインポートするには
お礼  にしもり  - 05/11/15(火) 16:35 -

引用なし
パスワード
   ▼小僧 さん:
ありがとうございました!
ご指摘のとおり、他の人が作ったEXCELです。
小僧さんはじめ皆様のアドバイスが高度であればあるほど自分の実力とのギャップを思い知らされます。精進致します。

【6825】Re:特定の行をインポートするには
質問  にしもり  - 05/11/16(水) 11:37 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。
おかげさまで希望とおりのファイルが出来るようになりました。

が、教えてください。
strDel=MID(strDel, 2)を終えた時点でstrDelには4:4が入っているのですよね。
これでなぜRange(1:1)とRange(2:2)とRange(4:4)がデリートできるのですか?
これがArrey関数というものなのですか。
素人ですみませんが狐につままれたようです。

【6826】Re:特定の行をインポートするには
発言  小僧  - 05/11/16(水) 13:00 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは。

>strDel=MID(strDel, 2)を終えた時点でstrDelには4:4が入っているのですよね。
>これでなぜRange(1:1)とRange(2:2)とRange(4:4)がデリートできるのですか?

strDel が 4:4 ですと、疑問に思われている通り 4 行目しか削除できません。

>  For i = 0 To UBound(Fuyo, 1)
>    strDel = strDel & "," & Fuyo(i) & ":" & Fuyo(i)
>  Next

この行で strDel の値を変化させています。


>これがArrey関数というものなのですか。


こちらも含めて、デバッグの仕方を説明させて頂きます。

まずブレークポイントを設定します。

>Sub 特定行を削除してExcelコピー()

の行の左の欄外をクリックして「○」を付けます。
(解らなかった場合は、2 行目に Stop と記述して下さい。)

この状態でコードを実行すると、
ブレークポイントでコードの実行が中断されます。

「F8」キーでステップ実行、「F5」キーで最後までコードが進行します。

また、ツールバーの [表示] から [ローカルウィンドウ] を表示させて下さい。

ステップ実行をする度に、変数の中身が色々と変わっていく様子が
伺えると思われます。

【6827】Re:特定の行をインポートするには
お礼  にしもり  - 05/11/16(水) 13:48 -

引用なし
パスワード
   ▼小僧 さん:

おもしろいですね!
○の使い方をはじめてしりました。
ローカルウィンドウの使い方を初めて知りました。
",1:1"
",1:1,2:2"
",1:1,2:2,4:4"
となっていくんですね。
そして最後にはstrDelは1:1,2:2,4:4になるんですね。
ロジックをよくみたら確かにそうなっていました。
ひさびさの感激を味あわせていただきました。
ありがとうございました。

1508 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free