Excel VBA 質問スレ Part41©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
2016/04/27(水) 04:11:46.79ID:Nk+oP5xRコード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part40
http://echo.2ch.net/test/read.cgi/tech/1455817784/
※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 122
http://echo.2ch.net/test/read.cgi/bsoft/1461287268/
0239デフォルトの名無しさん
2016/05/14(土) 02:50:51.66ID:KpaRNRq2.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheet2.Range("A1").CurrentRegion, copytorange:=Sheet4.Range("A1")
で型が一致しませんとでます。
0240デフォルトの名無しさん
2016/05/14(土) 03:04:50.16ID:KpaRNRq2フィルターはかかってなかったのでそのまま実行できました。
入力間違いがありました。失礼しました。
0241デフォルトの名無しさん
2016/05/14(土) 03:12:37.15ID:TfiX7v5Q元のコードで
clearしてるコードをコメントアウトして実行すると
フィルタした後に、showalldataするから何も変化しないはず
今度は、showalldataをコメントアウトしたらフィルタが掛かった状態のままになるはず
0242デフォルトの名無しさん
2016/05/14(土) 03:15:34.80ID:KpaRNRq2なんとなくわかった気がします。
Sheet2の見出しより下が検索条件になり、
Sheet3の中のSheet2にある行だけがSheet4にコピーされました。
それが可視セルになりSheet3の中のそれを消せば、Sheet2に無い行が残るわけですね。
0243デフォルトの名無しさん
2016/05/14(土) 03:21:50.26ID:TfiX7v5Qpublic sub xlacall()
call fileName.xla!subName
end sub
みたいなのを作るとか
0244デフォルトの名無しさん
2016/05/14(土) 03:32:07.92ID:KpaRNRq2.ShowAllDataをコメントアウトして実行してから、またコメントアウトをとったら、
実行時エラー 1004 ShowAllDataメソッドは失敗しました。Worksheetオブジェクト
と出るようになてしまいました。
0245デフォルトの名無しさん
2016/05/14(土) 07:39:07.00ID:hiszDsJfエスパー回答してみると
イントラとインターネットゾーン等でのIE8以降機能の整合性レベルが切り替えにたいする考慮をしていない
対策:Set objIE = CreateObject("InternetExplorer.Application")を
Set objIE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")にする。
0246デフォルトの名無しさん
2016/05/14(土) 10:13:09.39ID:NImZCMbBせっかくいろんなファイルで利用できるようにライブラリ化したのに、
毎回それつくるっていうのが面倒で質問に来ました。
xla化せずに必要な関数をすべて入れたブックを毎回開けばよくはあるのですが、
xlaってこんなに不便なものか?何かやりようがあるんじゃないか?と思って
調べたもののまったく見つからずにいます。
0247デフォルトの名無しさん
2016/05/14(土) 10:17:33.94ID:TfiX7v5Qxlaの方でアドイン先のブックにxlaのプロシージャを呼び出すボタンとかを作る様にすれば良いのでは?
ブックにアドインしたら、そのブックにボタンが作成される感じ
0248デフォルトの名無しさん
2016/05/14(土) 10:57:07.14ID:psfsGv+BVBE窓からだったら
ツール (T) > マクロ (M) > マクロの場所(A) で アドインを選べばいいんだけどね
シートからだとわからん
0249デフォルトの名無しさん
2016/05/14(土) 12:37:14.30ID:GIbFGwdT俺はアドインに関数を呼び出すフォームのリボンを作ってる
0250246
2016/05/15(日) 00:45:01.97ID:YpwUXGuD>>249
こういう方法があったんですね。
調べてみましたが、これで希望通りの挙動にできそうです。
ありがとうございました。
0251デフォルトの名無しさん
2016/05/15(日) 14:26:01.12ID:WcH5yz8P2016/05/15
という年月日が入っています。
このセルを含むシートをVBAを使ってCSVに吐き出すと
#2016-05-15#
この様に表示されてしまうのですが、
そのまま年月日で吐き出されるようにコントロールできませんでしょうか。
0252デフォルトの名無しさん
2016/05/15(日) 15:19:13.14ID:CrVPkhRD何を使ってCSV出力しているか知らないから
Write ステートメントを使用していると仮定して・・・
日付型 (Date) のデータは、共通日付形式を使用して
書き込まれるので日付型を文字列にする必要がある
セル表示形式のテキストをそのまま出力したいなら
Range.ValueではなくRange.Textプロパティを使う
FileNumber = FreeFile
Open "d:\test.csv" For Output As #FileNumber
Write #FileNumber, Cells(1, 1).Text
Close #FileNumber
0253デフォルトの名無しさん
2016/05/15(日) 15:19:48.19ID:ghf3z0AO0254デフォルトの名無しさん
2016/05/15(日) 15:38:07.34ID:WcH5yz8Pネットにあったコードをコピペをそのまま使って試してみました。
Cells(i, 3)が年月日で、上手く表示されません。
Sub writeCSVFile_Click()
'変数宣言
Dim filePath As String
Dim i As Long
Dim maxRow As Long
Dim fileNo As Integer
'初期値設定
filePath = ActiveWorkbook.Path & "\data.csv"
maxRow = Range("A1").End(xlDown).Row '最終行取得
fileNo = FreeFile 'FreeFile関数で使用可能なファイル番号取得
'ファイル開く
Open filePath For Output As #fileNo
'最終行までループ
For i = 1 To maxRow
'列の数は決め打ち
Write #fileNo, Cells(i, 1), Cells(i, 2), Cells(i, 3)
Next i
'ファイル閉じる
Close #fileNo
End Sub
0255デフォルトの名無しさん
2016/05/15(日) 15:44:13.67ID:tUFMlsQK出力じゃなくて表示なの?
意味がわからない
0256デフォルトの名無しさん
2016/05/15(日) 15:47:23.68ID:WcH5yz8Pわかりにくくてすみません。
上記でExcelからCSVに書き出した時に # が入ってしまいます。
0257デフォルトの名無しさん
2016/05/15(日) 15:53:44.82ID:6V2nRwSD>>252で答えが出てる
0258デフォルトの名無しさん
2016/05/15(日) 16:09:42.68ID:UAuTMPBr0259デフォルトの名無しさん
2016/05/15(日) 16:13:29.08ID:WcH5yz8Pありがとうございました。
Cells(i, 3).Text
該当箇所をこの様に書き換えただけで直りました!
0260デフォルトの名無しさん
2016/05/15(日) 20:06:14.39ID:ghf3z0AO数字だとマイナスに ex. 123 -> -123
和暦だと西暦に
0261デフォルトの名無しさん
2016/05/15(日) 20:10:37.37ID:ghf3z0AO数字だとマイナスに ex. 123 -> -123
和暦だと西暦に ex.平成28年1月1日 -> (2016/01/01)
なってしまいます
文章文字列などならうまくいくのですがどのようにマクロを書いたらいいのでしょうか
Sub 括弧()
ActiveCell.Value = "(" & ActiveCell.Value & ")"
End Sub
0262デフォルトの名無しさん
2016/05/15(日) 21:15:44.76ID:+ceGV5qASub 括弧()
With ActiveCell
txt = .Text '書式変更前の表示テキスト確保(通貨など)
If IsNumeric(.Value) Then
.NumberFormat = "@"
End If
.Value = "(" & txt & ")"
End With
End Sub
0263デフォルトの名無しさん
2016/05/15(日) 21:26:13.47ID:ghf3z0AOめっちゃスマートに書いてくださってありがとうございます
日付の場合数字の場合など複雑に考えて手をこまねいていました
0264デフォルトの名無しさん
2016/05/15(日) 21:33:39.41ID:iEYIRe/oボタンをクリックしたらあるセルをハイパーリンクにしたいのですが
Cells(2, "B") = "=HYPERLINK('test')"
これだけで400エラーが出ます。なぜなのでしょうか
0265デフォルトの名無しさん
2016/05/15(日) 21:39:01.79ID:U6OCYZVH0266デフォルトの名無しさん
2016/05/15(日) 22:09:37.23ID:iEYIRe/oありがとうございますm(__)m
シングルクォーテーションがいけなかったんですね
ほんとは変数を付けてURL作ってたので他言語の癖でダブルとシングル両方使わないといけないと思ってました
0267デフォルトの名無しさん
2016/05/17(火) 19:14:32.23ID:Ju7Z8cl/For i To Lastrow ※Sheet3の最終行
Set fnd = (Sheet2.Columns(2).Find(Sheet3.Cells(i,2)))
if Not (fnd Is Nothing) Then
if Sheet3.Cells(i,1) = Sheet2.Cells(fnd.Row,1) Then
Else
Sheet3.Cells(i,1)interior.ColorIndex = 3
End if
if Sheet3.Cells(i,2) = Sheet2.Cells(fnd.Row,2) Then
Else
Sheet3.Cells(i,2)interior.ColorIndex = 3
End if
if Sheet3.Cells(i,3) = Sheet2.Cells(fnd.Row,3) Then
Else
Sheet3.Cells(i,3)interior.ColorIndex = 3
End if
・
・
・
if Sheet3.Cells(i,20) = Sheet2.Cells(fnd.Row,20) Then
Else
Sheet3.Cells(i,20)interior.ColorIndex = 3
End if
Else
Sheet3.Cells(i,2).EntireRow.Interior.ColorIndex = 4
End If
Next i
という風にしているのですが、もう少しまとめらないかと思いました。
まとめられるのでしょうか?
0268デフォルトの名無しさん
2016/05/17(火) 19:17:20.83ID:Ju7Z8cl/Else
Sheet3.Cells(i,2)interior.ColorIndex = 3
End If
はいらなかったです。失礼しました。
0269デフォルトの名無しさん
2016/05/17(火) 20:15:20.61ID:YEbHD3bH0270デフォルトの名無しさん
2016/05/17(火) 20:24:22.15ID:Ju7Z8cl/switch文とはどのように使うのでしょうか?
今調べて見てるのですが・・・
0271デフォルトの名無しさん
2016/05/17(火) 20:33:31.31ID:uw1YLM9Dせめて Then Else は条件逆にしたら?
> For i = ? To Lastrow ※Sheet3の最終行
> Set fnd = Sheet2.Columns(2).Find(Sheet3.Cells(i,2))
> If Not (fnd Is Nothing) Then
> If Sheet3.Cells(i,1) <> Sheet2.Cells(fnd.Row,1) Then
> Sheet3.Cells(i,1).Interior.ColorIndex = 3
> End If
> If Sheet3.Cells(i,2) <> Sheet2.Cells(fnd.Row,2) Then
> Sheet3.Cells(i,2).Interior.ColorIndex = 3
> End If
> If Sheet3.Cells(i,3) <> Sheet2.Cells(fnd.Row,3) Then
> Sheet3.Cells(i,3).Interior.ColorIndex = 3
> End if
> ・
> ・
> ・
> If Sheet3.Cells(i,20) <> Sheet2.Cells(fnd.Row,20) Then
> Sheet3.Cells(i,20).Interior.ColorIndex = 3
> End if
> Else
> Sheet3.Cells(i,2).EntireRow.Interior.ColorIndex = 4
> End If
> Next i
0272デフォルトの名無しさん
2016/05/17(火) 20:35:42.07ID:Ju7Z8cl/そうでした。申し訳ありません。
わざわざ=で、Elseを入れる意味はないですね。
その上で、このIf文をもう少しまとめる方法はないでしょうか?
0273デフォルトの名無しさん
2016/05/17(火) 21:09:16.27ID:Bh5kVr4XFor i = 1 To Lastrow '※Sheet3の最終行
Set fnd = (Sheet2.Columns(2).Find(Sheet3.Cells(i, 2)))
If Not (fnd Is Nothing) Then
For j = 1 To 20 '★1列目から20列目まで?
If Sheet3.Cells(i, j) <> Sheet2.Cells(fnd.Row, j) Then
Sheet3.Cells(i, j).Interior.ColorIndex = 3
End If
Next
Else
Sheet3.Cells(i, 2).EntireRow.Interior.ColorIndex = 4
End If
Next i
0274デフォルトの名無しさん
2016/05/17(火) 21:29:43.68ID:kv5Z22Gcswitch文はif then elsif elsif ...
に相当するものだった
列も2〜20までforで回したら?
for i to lastrow
for j = 2 to 20
if 条件 then
endif
next j
next i
0275デフォルトの名無しさん
2016/05/17(火) 21:35:27.61ID:Ju7Z8cl/Set fnd = (Sheet2.Columns(2).Find(Sheet3.Cells(i, 2)))
If Not (fnd Is Nothing) Then
の部分をFor j = 1 To 20 の中に入れてましたが、
よく考えたら、一度検索して見つかったらその行を確認していってるので、
中に入れてたら、何度もヒットさせる余計な処理になってしまってました。
ありがとうございました。
0276デフォルトの名無しさん
2016/05/17(火) 21:42:55.17ID:Ju7Z8cl/ありがとうございました。
それだけでよかったですね。
0277デフォルトの名無しさん
2016/05/19(木) 15:21:44.50ID:hJ/G9SOxその値が入っているセルの位置情報が記憶され、そこから検索がかかるという認識で
よいのでしょうか?
0278デフォルトの名無しさん
2016/05/19(木) 16:33:50.64ID:oZsWPLv6https://msdn.microsoft.com/ja-jp/library/office/ff839746.aspx
google とかでexcel vba find とか検索すれば出てくる
0279デフォルトの名無しさん
2016/05/20(金) 17:13:57.06ID:P6F1ZDVPID変わりましたが、返信遅くなりました。
そこは見ているのですが、何故変数にはセルの値が入っているのに、セルの場所を指定した事になるのかと思いまして、質問させていただきました。
0280デフォルトの名無しさん
2016/05/20(金) 18:50:53.92ID:gsWAgsomFindのAfterは値じゃなくて、セル範囲の情報なども含むRangeオブジェクトだよ
Findの戻り値も同じくRangeオブジェクトになる
Rangeオブジェクト
https://msdn.microsoft.com/ja-jp/library/office/ff838238.aspx
0281デフォルトの名無しさん
2016/05/20(金) 21:49:54.04ID:d/ZNR8o9?"a"&"b"
は
ab
と出力されますが
?"a"&1
は
a 1
と出力されます
なぜ半角スペースが交じるのでしょうか?
0282デフォルトの名無しさん
2016/05/20(金) 22:04:33.27ID:RvnBIaae? "a"&10
a 8
? "a"&100
a 64
? "a"&1000
a 512
後はわかるな?
0283デフォルトの名無しさん
2016/05/20(金) 22:14:31.20ID:d/ZNR8o9すいません、さっぱりわかりません。
? 100
100
? "a" & 100
a100
?"a"&100
a 64
?"a100"
a100
?"b"&100
b 64
?"x"&100
x 64
010が2byteで64かなーというのは想像できますが、
何故こうなるのでしょうか
0284デフォルトの名無しさん
2016/05/20(金) 22:20:25.08ID:Pie8/Dil?"a"&1 を
?"a" & 1 のように
&の前後に空白を入れてやれば"a1"と出力される
試しにコード上で
Debug.Print "a"&1 と&の前後に空白なしで記述すると
Debug.Print "a"; &O1 に自動変換されるので
おそらく文字型と数値型の2つの型のデータが出力されている
数値型データの場合、先頭に空白が入る模様
0285デフォルトの名無しさん
2016/05/20(金) 22:33:41.48ID:d/ZNR8o9なるほど
&N01
&P01
ではだめで
&O01
でいいのは何ででしょう?
0286デフォルトの名無しさん
2016/05/20(金) 22:39:11.93ID:Pie8/Dil先頭 &H の数値は16進数
0287デフォルトの名無しさん
2016/05/20(金) 22:39:59.19ID:RMEVZVQK&O は8進数
0288デフォルトの名無しさん
2016/05/20(金) 22:50:42.69ID:d/ZNR8o9ありがとうございます!
こういうのは数値リテラルというのでしょうか?
0289デフォルトの名無しさん
2016/05/20(金) 23:18:49.15ID:V/0gJxiWa-64
0290デフォルトの名無しさん
2016/05/21(土) 01:56:41.84ID:DHWj1BOs>数値型データの場合、先頭に空白が入る模様
先頭は符号。正の符号が空白で表されてる
0291デフォルトの名無しさん
2016/05/21(土) 18:06:47.94ID:8UwytgDTMin,max関数で最小、最大値を求める作業を複数のcsvファイルで行いたい場合どのようにすべきでしょうか?
具体的には=max(a2:a56)という動作をを1000個のcsvファイルに対してまとめて行い、各csvファイルの最大値を1つのファイルにまとめる動作を行いたいです。
1000個csvファイルのデータの位置(a2:a56)は同じです。
このような動作を行うマクロは組むことができるのでしょうか?
Vba始めてばかりなので間違いなどあればすみません。
0292デフォルトの名無しさん
2016/05/21(土) 18:31:55.59ID:3PJd0Iymマクロの記録をしてそれを繰り返せば良い
0293デフォルトの名無しさん
2016/05/21(土) 19:00:55.32ID:2DvXotsFまたIDが変わってしまったのですが質問者です。
申し訳ありません。そのセル範囲を含む情報が含まれるということは、
どういうことなのでしょうか?
例えば、1列目を指定してFindで検索し、
検索した結果見つかったセルの値をaに入れたとします。
1列目に検索したいものが複数あり再検索したい場合、
再度、Findを記述するかFindNextでAfterにaを指定すると思いますが、
そのaのセル範囲を含む情報というのは、何を示しているのでしょうか?
0294デフォルトの名無しさん
2016/05/21(土) 21:23:45.26ID:a3pocFu9Dim a As Range
Set a = Range("A1:A10").Find("検索文字列")
↑で、A1のセルがヒットしたとする場合
↓下記と同義のRangeオブジェクトが変数aに設定される
Set a = Range("A1")
Range プロパティ (Excel)
https://msdn.microsoft.com/ja-jp/library/office/dn301006.aspx
で、Rangeオブジェクトにはセルに関するいろんなプロパティを保持している
a.Value '<-セルの値(既定プロパティ)
a.Address '<-セルの参照範囲
a.Row '<-セルの行番号
a.Column '<-セルの列番号
…
Findメソッドがどのプロパティを参照しているかは知らないが
Afterに指定されたセル(※Rangeオブジェクト)の行番号、列番号
もしくはアドレスから次の検索セルを判断していると思われる
0295デフォルトの名無しさん
2016/05/21(土) 21:53:40.84ID:2DvXotsFF8やF5で実行を止めながら確認しても、aには値しか見えないですが、
実はRangeオブジェクトが入っているという事なのですね。
それはExcelの仕様という事なのでしょうか?
0296デフォルトの名無しさん
2016/05/21(土) 22:46:05.51ID:a3pocFu9変数の詳細な内容が見たいなら
ローカルウィンドウ なり ウォッチウィンドウ で確認するといい
Excel VBA 入門講座 ローカルウィンドウ
http://excelvba.pc-users.net/fol8/8_2.html
Excel VBA 入門講座 ウォッチウィンドウ
http://excelvba.pc-users.net/fol8/8_3.html
0297デフォルトの名無しさん
2016/05/21(土) 22:47:52.19ID:DHWj1BOsそれデフォルトプロパティが見えてるだけ
ちゃんとウォッチ式追加してウォッチウィンドウで見てみろ
0298デフォルトの名無しさん
2016/05/21(土) 23:20:54.65ID:2DvXotsF>>297
了解しました。ありがとうございます。
今確認してみてるのですが、
列指定してFindし、その結果を元に再検索に再度FindのAfterで
最初の検索結果を指定しその次から検索していますが、
空白が指定された場合、ちゃんと表の範囲内を検索し、
先頭に戻ってくれているのは確認できました。
結果としては非常にありがたいのですが、何故そうなるのかがわかりません。
列は指定しましたが、表の範囲は指定していないのに・・・
0299デフォルトの名無しさん
2016/05/22(日) 01:20:39.82ID:RVVHScN00300デフォルトの名無しさん
2016/05/22(日) 01:38:56.00ID:vMk8bbvq0302デフォルトの名無しさん
2016/05/22(日) 09:40:44.20ID:vMk8bbvq質問すればよろし
回答するスレではないんで、
回答するのは気分次第だけどな
0303デフォルトの名無しさん
2016/05/22(日) 10:36:35.32ID:F3XVlBdeApplication.Dialogs(xlDialogSendMail).〜
でアクティブブックをそのまま.xlsmとして添付メールすることはできるのですが、送り先にxlsに変換して送りたいです
FileFormat的な処理をしてワンクッション無しでそういった事を、するのは可能でしょうか?
宜しくお願いします
0304デフォルトの名無しさん
2016/05/22(日) 11:40:55.24ID:viRK9kIz>xlsに変換して
>アクティブブックを〜ことはできる
>ワンクッション無しで
ワンクッションとは?
0305デフォルトの名無しさん
2016/05/22(日) 12:37:39.34ID:F3XVlBdeコマンドボタンワンクリックで済ませたいので、一つのイベントプロシージャに収めたいという事です
もし別の処理をしないと不可能だという事でしたら、もう一つボタンを追加したりして対応したいと思いますが、何かいい方法がありましたらご教授お願いします
0306デフォルトの名無しさん
2016/05/22(日) 12:55:07.15ID:MkPG05kK素人だけど書いてみた Excel2003/Vistaで動作確認
http://codepad.org/h9iBcEZo
1列目のある範囲の最大値だけなんでCSVをワークシートへは取り込んでない
動作おかしかったらリスト読んで適当に直して
0307デフォルトの名無しさん
2016/05/22(日) 14:00:36.34ID:uwOrwjCqSaveAsで一旦.xls(xlExcel8形式あたり)で保存してから送信すれば行けるんじゃね
0308デフォルトの名無しさん
2016/05/23(月) 19:14:37.25ID:+L6Gybj90309デフォルトの名無しさん
2016/05/23(月) 20:04:34.59ID:fFz6fB8+あんた・・・それは
やめた方が
いいな!
0310デフォルトの名無しさん
2016/05/23(月) 23:02:51.54ID:EBQbKa6e自己解決したのですが
ちなみに止めた方がいい理由って何ですか?
気になります
0311デフォルトの名無しさん
2016/05/23(月) 23:05:46.46ID:OgrQhKAM0312デフォルトの名無しさん
2016/05/23(月) 23:40:18.70ID:fFz6fB8+もう考えない方がいい
どうしてもだ!
スレの住人として
忠告する!
じゃあ俺は
これで・・・またな
0313デフォルトの名無しさん
2016/05/23(月) 23:44:12.90ID:zjNqCcoU結論からいうとできました
Implements は複数設定できるので
後はそれぞれのインターフェースを
実装すれば良いだけでした
0314デフォルトの名無しさん
2016/05/25(水) 19:58:38.92ID:vZFTiHPJ亀レスすみません。
マクロの記憶だと作業中のファイルのみしかマクロが機能しないのでは無いでしょうか?
また、1000個のファイルに対して一つ一つマクロ実行するのは大変なので、1000個のcsvファイルの最大値を一つのファイルにまとめる作業を、一度に出来る方法は無いのでしょうか?
0315デフォルトの名無しさん
2016/05/25(水) 20:22:35.58ID:tfoRBKUB対象が同じフォルダに入っているファイル全部とかだったら別にどうってことなくね?
0316デフォルトの名無しさん
2016/05/25(水) 20:48:22.69ID:RqoGasre0317デフォルトの名無しさん
2016/05/25(水) 21:45:43.06ID:1qBlGVzrレスありがとうございます。
315さんの言う通り、対象は同じフォルダに入ってるファイルすべてです。
どうってこと無いというのは、やり方が簡単という事でしょうか?
宜しければ、マクロの記憶を繰り返す以外にもう少し具体的に教えていただければ幸いです。簡単な例文や使用すればいい関数など...
最近vbaを始めたばかりで、まだrangeやif文を習った程度の知識でして...
あと、拡張子にcsvが付いてたのでcsvファイルと言ってたのですが、対象となるのは普通のエクセルのファイルです。
>>316
ありがとうございます。
検討してみます。
0318デフォルトの名無しさん
2016/05/25(水) 22:41:50.45ID:enDBv6qD拡張子がcsvのファイルをテキストエディタで開いてみたら?
excel vba for
をググって繰り返しのやり方を調べる
試しに3個のファイルを対象にして作ってみる
0319デフォルトの名無しさん
2016/05/25(水) 23:17:20.71ID:CznCF+TX1度にやる方法は無いかと言われれば
無いこともないけど、本当にその方法が有効かはまた別問題。
例えばADO接続でCSVファイルからSQLで値を取得するときは
フォルダがDB、その中にある各CSVファイルがテーブル扱いになるので、
そのフォルダ内の対象になるCSVファイル名を先に全て取得しておいて
SQLでUNIONで繋げておけばできるけど、
本当にそれが速くて簡単かは相当疑問が残るよね。
0320デフォルトの名無しさん
2016/05/25(水) 23:21:01.56ID:Uf48Qhpgとりあえず、1つのファイルに対する処理を完成させる
後はループ処理で更新するファイルを変えつつ↑の処理を繰り返す
ところでループ処理は判ってんの?
do until とか
0321デフォルトの名無しさん
2016/05/25(水) 23:39:18.00ID:tfoRBKUBもしかしてこれがネック?
0322317
2016/05/25(水) 23:42:26.41ID:1qBlGVzrご回答いただいた方法で試してみます。
0323デフォルトの名無しさん
2016/05/26(木) 00:10:51.15ID:tOkM+sU0306に書いたんだけど動かなかったの?
ファイル名の取得は306のプロシージャでできるはず
csvじゃなくてxlsを読むならfunctionのところを自分なりに書き換えろ
0324デフォルトの名無しさん
2016/05/26(木) 03:19:58.19ID:tOkM+sU0xls読込みの追加と306でのcsv読込関数の訂正をあげとく
http://codepad.org/syUhdaGh
ExecuteExcel4Macro って命令使うともっと早くなるらしいけど
俺にはうまく使えなかった
CSVの方が早いので用意できるならCSVファイルで処理した方がいいと思う
他の人も言ってる様にスクリプトなんかも使いやすいし
0325デフォルトの名無しさん
2016/05/26(木) 07:35:57.45ID:yzIVgV2w>ExecuteExcel4Macro って命令使うともっと早くなるらしいけど
Microsoftからとっくにサポート打ち切られているようなの持ち出すのやめれ
0326デフォルトの名無しさん
2016/05/26(木) 08:48:16.33ID:EV8ndBzbってあったようだけど、今は無くなってる?
0327デフォルトの名無しさん
2016/05/26(木) 10:01:25.13ID:tOkM+sU0>Microsoftからとっくにサポート打ち切られているようなの
ここなんかは Office 2013 and later って書いてるけど今は打ち切られたのか?
https://msdn.microsoft.com/ja-jp/library/office/ff193589.aspx
0328デフォルトの名無しさん
2016/05/26(木) 14:46:41.03ID:TLCYm3V6参考書に、離れた行や列を非表示にするにはRangeプロパティのあとにEntireを使いましょうとあります。
RangeプロパティのあとにいきなりRows.Hidden=Trueとしても意図していた作業ができるのですが、Entireはなぜ必要なのでしょうか。
0329デフォルトの名無しさん
2016/05/26(木) 15:31:24.30ID:UrTJJdUS>>327書いたんだけど ExecuteExcel4Macro って互換性維持の為だけにあるみたいなんだね
後々使えなくなるって意味で言ってたって事がようやく理解できた
変な事書いてすまんかった
0330デフォルトの名無しさん
2016/05/26(木) 15:44:42.47ID:Dvh4dhBn安全のためだからできるんならいらないんじゃね
0331デフォルトの名無しさん
2016/05/26(木) 20:16:50.15ID:lgiuDAuhRowsは連続した行しか指定できないけど、EntireRowsは離れた行を指定できるからじゃね。
0332デフォルトの名無しさん
2016/05/27(金) 01:04:42.25ID:gB8QuuHHHiddenに関しては特に問題ないだろうけど、
部分的なセル範囲を含む“行全体”を厳密に扱いたいなら
EntireRowの方が安全かな
Debug.Print Range("A1:A3").EntireRow.Address
→ $1:$3
Debug.Print Range("A1:A3").Rows.Address
→ $A$1:$A$3
Debug.Print Rows("1:3").Address
→ $1:$3
0333デフォルトの名無しさん
2016/05/27(金) 23:11:50.47ID:4UuWR9R4遅くなりましたが、皆さんありがとうございます!
なにぶん初心者なもので、下手にオリジナリティを出さずに慣れるまでは公式に則ってきちんと学ばなければと思いました
またお世話になるかもしれませんが、そのときは何卒よろしくお願いします
0334デフォルトの名無しさん
2016/05/28(土) 00:22:34.85ID:MsTgKpLn0335334
2016/05/28(土) 00:24:50.50ID:MsTgKpLn0336デフォルトの名無しさん
2016/05/28(土) 01:38:03.64ID:GZWeia2p試しにデータを以下のように確認してみると、
時刻じゃない日付値が返ってくるのが原因かも
Debug.Print TimeSerial(23, 59, 59.99)
→ 1899/12/31
TimeValue関数で時刻部分だけ取り出すようにしてみては?
Application.OnTime TimeValue(TimeSerial(Hour(Now()), Minute(Now()), 59.99)), "a"
0337デフォルトの名無しさん
2016/05/28(土) 03:56:22.62ID:z46njfbnまずTimeSerialの秒に59以上を渡したときの動作は未定義だな
これは繰り上がった00秒を返してるっぽいので、23:59:59.99は繰り上がって翌日の日付のある時刻を返してる
Application.OnTimeは、指定された時刻が日付持ってるかどうかで動作を変えてる
日付を持ってないときは当日の指定時刻、日付を持ってるときは指定日付の指定時刻に処理実行
23時59分のときだけ、日付付きの時刻を渡してるが、その日付は過去の日付なので
処理が即実行されてる
まあ多分こういう事じゃないかと
0338デフォルトの名無しさん
2016/05/28(土) 08:26:40.26ID:CHU6gzT2■ このスレッドは過去ログ倉庫に格納されています