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/
0154デフォルトの名無しさん
2016/05/07(土) 15:00:10.35ID:1wAcRjrQんじゃ、ここでピントの合ったレスをID:8kiHQWJTがどうぞ
0155デフォルトの名無しさん
2016/05/07(土) 15:35:39.10ID:nzotyd+v紙だろうが電子だろうが書籍の出番なし
0156デフォルトの名無しさん
2016/05/07(土) 16:20:40.94ID:PC4ZOeicオフラインのヘルプ日本語版が欲しい
0157デフォルトの名無しさん
2016/05/07(土) 16:27:15.49ID:6qCtvFTs電子オンラインヘルパーさんの出番なし
0158デフォルトの名無しさん
2016/05/07(土) 17:34:52.23ID:sN4H5bv9ドン引き
0159デフォルトの名無しさん
2016/05/07(土) 17:49:10.43ID:1Difn6h50160デフォルトの名無しさん
2016/05/07(土) 18:04:13.20ID:QutgNX3WOffice 2013 VBA用オフライン ヘルプ ファイルが欲しい場合〜開発時に役立ちます! - 元「なんでもエンジニ屋」のダメ日記
http://nasunoblog.blogspot.jp/2013/11/office-2013-vba.html
これではダメ?
0161デフォルトの名無しさん
2016/05/07(土) 22:11:16.28ID:sN4H5bv9出ていってくれ
0162デフォルトの名無しさん
2016/05/08(日) 00:54:50.32ID:ikF8GjeW0163デフォルトの名無しさん
2016/05/08(日) 01:10:44.31ID:HXCktBbn日本語ヘルプなんて誤訳だらけで役に立たないのに
0164デフォルトの名無しさん
2016/05/08(日) 04:17:19.71ID:ikF8GjeW0165デフォルトの名無しさん
2016/05/08(日) 06:04:10.40ID:d67L2ADZ0166デフォルトの名無しさん
2016/05/08(日) 08:58:00.55ID:7UXL6x+WJapanese help isn't useful full of mistranslation.
0167デフォルトの名無しさん
2016/05/08(日) 09:40:20.29ID:cY3IZjLswith poor ability not to read this easy English?
The MSDN document in Japanese translation doesn't help!
0168デフォルトの名無しさん
2016/05/08(日) 10:20:00.62ID:MurkxjfXこなれた感を必死に出そうとして滑稽
Oh 坊やと英語板では呼ばれている
0169デフォルトの名無しさん
2016/05/08(日) 10:45:47.51ID:NRyLEpvc>>168
ですってyo
0170デフォルトの名無しさん
2016/05/08(日) 11:33:31.06ID:rP7gnQo6最後の方で「セルに書く方の関数の事やんけ!」ってなった事はある。
0171デフォルトの名無しさん
2016/05/08(日) 11:35:57.16ID:7UXL6x+W文句はエキサイト翻訳に言えばいいと思うよ...
恥ずかしい奴 w
0172デフォルトの名無しさん
2016/05/08(日) 13:08:20.31ID:cY3IZjLsHey, you dare work on programming
with poor ability not to WRITE this easy English?
The translation service of Excite doesn't help!
0173デフォルトの名無しさん
2016/05/08(日) 14:12:42.71ID:6KbaYcKf具体的なたとえで言いますと
Personというクラスからたくさんオブジェクトをつくり
その1つのプロパティであるBirthDayで生年月日順で人を並べたいのです。
0174デフォルトの名無しさん
2016/05/08(日) 14:29:53.33ID:QvSZMceuWith Sheet3
Sheet1.Range(
0175デフォルトの名無しさん
2016/05/08(日) 14:30:54.84ID:QvSZMceuWith Sheet3
Sheet1.Range("A1").CurrentRegion.Copy .Range("A1")
With .Range("A1").CurrentRegion
.AdvancedFilter xlFilterInPlace,Sheet2.Range("A1").CurrentRegion
.SpecialCells(xlCellTypeVisible).Clear
End With
.ShowAllData
For a=.Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
If .Range("A" & a)="" Then
.Rows(a).RntireRow.Delete
End If
Next a
End With
Sheet1とSheet2を比較し、変更があったところをSheet3にコピーしているのですが、
変更箇所がわかるようにセルの色を変えたいのですが、どうしたらよいかわからず
困っています。わかる方いらっしゃいますでしょうか?
0176デフォルトの名無しさん
2016/05/08(日) 14:35:59.31ID:QvSZMceu0177デフォルトの名無しさん
2016/05/08(日) 14:36:08.66ID:ZUgYOGn0インデックス[0〜n-1]の配列をプロパティ順にソートしておく。
対象のクラスオブジェクトの配列を、先ほど作っておいたインデックスに沿ってpermutateする。
0178デフォルトの名無しさん
2016/05/08(日) 15:05:36.92ID:E74hVYZWシートにインスタンスオブジェクトを識別するIDと
プロパティをA列、B列に入力して
プロパティの列目でソートする
ID列の値でアクセスする
インスタンスオブジェクトはdictionaryに格納してIDをキーにしておく
0179デフォルトの名無しさん
2016/05/08(日) 15:08:58.84ID:E74hVYZWif文で比較して違ったらrange.interior.colorプロパティを変えるとか
書き方が判らないのはマクロを記録してみたら判ると思うけど?
0180デフォルトの名無しさん
2016/05/08(日) 15:12:38.09ID:rP7gnQo6Sub Test(Person, Collection)
i = 1
If Collection.Count Then
For i = i To Collection.Count
If Person.BirthDay < Collection(i).BirthDay Then Exit For
Next
End If
Collection.Add Person, , i
End Sub
>>175
Sub Test(Sheet1, Sheet2, Sheet3)
s1d = Sheet1.UsedRange.Value
s2d = Sheet2.UsedRange.Value
For i = LBound(s1d, 1) To UBound(s1d, 1)
For j = LBound(s1d, 2) To UBound(s1d, 2)
If s1d(i, j) <> s2d(i, j) Then
Sheet1.Cells(i, j).Interior.Color = RGB(255, 0, 0)
Sheet1.Cells(i, j).Copy Sheet3.Cells(i, j)
End If
Next
Next
End Sub
0181デフォルトの名無しさん
2016/05/08(日) 15:12:56.95ID:QvSZMceuおそらく
With .Range("A1").CurrentRegion
.AdvancedFilter xlFilterInPlace,Sheet2.Range("A1").CurrentRegion
.SpecialCells(xlCellTypeVisible).Clear
End With
の間に入れるのだろうとは思ったのですが、うまくいきません。
if文で比較というのは、ShowAllDataの前に入れるってことですか?
0182デフォルトの名無しさん
2016/05/08(日) 15:44:19.75ID:QvSZMceuありがとうございます。
Sub Test(Sheet1, Sheet2, Sheet3)
の部分は、シート名をいれるのでしょうか?
0183デフォルトの名無しさん
2016/05/08(日) 15:47:12.37ID:rP7gnQo6Worksheetオブジェクトを入れる。
0184デフォルトの名無しさん
2016/05/08(日) 16:01:33.95ID:QvSZMceuone=Worksheet("Sheet1").UsedRange.Value
としているのに、For分のLBound(one,1)の所で配列がありませんと出てしまいます。
0185デフォルトの名無しさん
2016/05/08(日) 16:45:05.73ID:MWz94FDA自動記録で試したところ
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="Sheet2!A1"
このようなコードが出てきたのですが
選択中のセルに実行する命令では無くセル番地で実行する場所を指定したいのですが、一体どう書けばいいのでしょうか?
0186デフォルトの名無しさん
2016/05/08(日) 17:43:54.77ID:Uh7lvDUNexcel vba セル 番地 指定 でググる
0187デフォルトの名無しさん
2016/05/08(日) 17:49:35.23ID:B17gXYq2ActiveSheet.Hyperlinks.Add Anchor:=ActiveSheet.Range("B1"), Address:="", SubAddress:="Sheet2!A1"
0188デフォルトの名無しさん
2016/05/08(日) 18:50:05.07ID:LbMOyLBe>>186
ありがとうございます。
0189デフォルトの名無しさん
2016/05/08(日) 21:28:50.28ID:Mc3+72Z/隣り合ったふたつのセルを結合したいのですが、
1.セルA1とB1を結合
2.セルA2とB2を結合
3.以降、任意の行まで同じ作業を繰り返し
4.AB列で作業が終わったら次はCD列でも同じ作業
5.CD列が終了したらEF列に移動
6.以降、任意の列まで同じ作業を繰り返し
です。
その際結合させるふたつのセルにはそれぞれ値が入っていますが、活かすのは左のセルの値です。
結合の際の「右上のデータが〜」というメッセージは無視したいです。
どなたかお分かりの方がいらっしゃいましたらお願いします。
0190デフォルトの名無しさん
2016/05/08(日) 22:06:12.34ID:to9qHxlC0191デフォルトの名無しさん
2016/05/08(日) 22:14:16.85ID:to9qHxlCこんな感じ?
For cc = 1 To Selection.Columns.Count Step 2
For rr = 1 To Selection.Rows.Count
Selection.Cells(rr, cc + 1).Value = ""
Selection.Range(Cells(rr, cc), Cells(rr, cc + 1)).MergeCells = True
Next
Next
0192デフォルトの名無しさん
2016/05/08(日) 22:47:03.73ID:Mc3+72Z/さっそくのご回答ありがとうございます。
今から試してみます。
0193デフォルトの名無しさん
2016/05/08(日) 23:07:29.52ID:Mc3+72Z/書いていただいたVBAをコピペして試しましたが、セルをひとつ結合しただけで終わってしまいました。
0194デフォルトの名無しさん
2016/05/08(日) 23:09:23.84ID:Mc3+72Z/ありがとうございます!
0195デフォルトの名無しさん
2016/05/10(火) 01:32:49.02ID:IdRScl5yなられるのであれば、意味を教えていただきたいのですが、
For a = 2 To Lastrow1 ※Lastrow1はSheet1の最終行
@Set fnd =(Sheet2.Columns(14).Find(Sheet1.Cells(a,4).Value)
if Not (fnd Is Nothing) Then
Day=DateSerial(2000,1,1)
num=Sheet2.Cells(fnd.Row,14).Value
fad=fnd.Address
Do
If Sheet2.Cells(fnd.Row,12).Value > Day Then
a2=fnd.Row
Day=Sheet2.Cells(a2,12).Value
End If
Set fnd = Sheet2.Columns(14).FindNext(fnd)
Loop While Not fnd Is Nothing And fnd.Address <> fad And Sheet2.Cells(a2,14).Value=num
Sheet2の12列目には日付が入っており、14列目には番号が入っています。
それを一致させているのはわかるのですが、特にLoopを抜ける条件のところが
理解できません。おわかりになる方はいらっしゃいますでしょうか?
0196デフォルトの名無しさん
2016/05/10(火) 02:05:42.50ID:wnAOqKt0Not (fnd Is Nothing) → fnd変数がNothingでは無い
And (fnd.Address <> fad) → かつ fndセルのアドレスがfadと一致しない
And (Sheet2.Cells(a2,14).Value=num) → かつ Sheet2.Cells(a2,14).Valueとnumが一致
つまり以下の場合にLoopから抜ける
・fndがNothingになった時
・または fndセルのアドレスがfadと一致した時
・または Sheet2.Cells(a2,14).Valueとnumが一致しない
0197デフォルトの名無しさん
2016/05/10(火) 02:21:30.80ID:IdRScl5yありがとうございます。
Set fnd = Sheet2.Columns(14).FindNext(fnd)
で最初の検索から、更に同じ番号のセルがないかを検索して、
見つかった場合は、fnd内にその見つかった番号が入ると思うのですが、
そうなると、検索で番号が見つかっているので既に番号の一致はとれていて、
更にSheet2.Cells(a2,14).Valueとnumの番号の一致をとっているのは、
2重で一致をとっていることになるのでしょうか?
文章が下手ですみません。
0198デフォルトの名無しさん
2016/05/10(火) 03:51:15.80ID:wnAOqKt0そうなるかも・・・加えて言えば、(Not fnd Is Nothing) と (fnd.Address <> fad)の
条件部分もVBだと両立しないのでNothingの判定はいらないかも
※fnd変数のNothing 判定を並列のIF条件に書くと fndがNothing の時にたぶん実行時エラーが出る
ループの条件はたぶん以下のように省略できる
Do
〜(ループ処理)
Set fnd = Sheet2.Columns(14).FindNext(fnd)
Loop While (fnd.Address <> fad)
0199デフォルトの名無しさん
2016/05/10(火) 04:06:59.93ID:IdRScl5yありがとうございます。
Sheet2の14列目に同じ番号が複数あり、番号だけで比較すると、
古い行がヒットしてしまうので、12列目に日付も書いてあり、
最新の状態の行を確認して、その結果を反映させたかったのですが、
アドレスの不一致だけで大丈夫なのでしょうか?
0200デフォルトの名無しさん
2016/05/10(火) 04:43:26.31ID:pT7b4QGj0201デフォルトの名無しさん
2016/05/10(火) 04:46:33.24ID:IdRScl5y試してはいるのですが、少し行数も多く確認に時間がかかってしまっています。
すみません。
0202デフォルトの名無しさん
2016/05/10(火) 05:27:34.40ID:IdRScl5yすみません。うかがいたいのですが、
Set fnd = Sheet2.Columns(14).FindNext(fnd)
Loop While (fnd.Address <> fad)
の場合、アドレスが一致するまでループを繰り返す、
一致したらループを出る、という事だと思うのですが、
例えば、同じ番号の行が2行あったとして、
その2行目の方が新しい日付の行だとして、その行をこの後に続く
条件式に当てはめていきたいのです。
で、一致するまでという事は、最初の検索で1行、FindNextで更に検索で
日付の新しい番号の一致するもう1行、でまた検索で
最初の1行でアドレスが一致してループが抜ける・・・合計3回検索することになると思うのですが、
最終的にループを出る時は、最初の行で抜けてしまう気がするのですが、
その解釈は間違ってますでしょうか?
0203デフォルトの名無しさん
2016/05/10(火) 06:06:50.39ID:wnAOqKt0fndの値は確かに最初の行に戻って抜けてしまうが、
FindNext直前のIf文の所で 変数 a2 に最新日付の行番号を取得しているようだし
Loopを抜けた後はそれを使えば欲しい行は持ってこれると思う
Sheet2.Rows(a2)
Sheet2.Cells(a2, [列番号])
0204デフォルトの名無しさん
2016/05/10(火) 06:19:28.37ID:wnAOqKt0最初のアドレスと比較することでループを抜ける条件にしてるんじゃないかな
0205デフォルトの名無しさん
2016/05/10(火) 06:21:27.00ID:IdRScl5y本当にありがとうございます!
なるほど、確かにループは抜けてもa2にはその前の状態ですね!
やっと意味がある程度わかりましたw
0206デフォルトの名無しさん
2016/05/10(火) 06:26:04.87ID:pT7b4QGj要点だけを抜き出した、短く新しいソースコードで試す
複雑なソースコードで、検証しない
なぜなら別の要因が混じってくるから、
そういうものを排除した環境で、テストする
0207デフォルトの名無しさん
2016/05/10(火) 06:26:26.62ID:IdRScl5yあ、なるほど。Findだけだと検索し続けてしまうのですね。
0208デフォルトの名無しさん
2016/05/10(火) 06:28:47.47ID:IdRScl5y了解しました。ありがとうございます。
0209デフォルトの名無しさん
2016/05/13(金) 03:32:37.47ID:mSOPxExz例えば、Aというサイトを開き、そのサイト内のリンクから、Bというサイトに移動します。そして、BというサイトのリンクからCというサイトに移動したいのに、Bというサイトに移動したまま何の制御もできません。
OSはwindows8.1
excelは2013
ieは11です。
0210デフォルトの名無しさん
2016/05/13(金) 04:50:10.69ID:xGtILQbg人間がマウス操作してリンクをクリックするの?
そもそもIE11では、ReadyStateの値がちゃんと変わらないので、ちょっと工夫しないとうまく制御できない
画面がチラチラしてもいいんなら、こうやれば読み込みの完了が旧バージョンと同じように判定できるようになるけど
objIE.Visible = False ' 一度ブラウザを消して
objIE.Navigate sURL ' 指定のURLにジャンプしてから
objIE.Visible = True ' もう一度表示する
0211デフォルトの名無しさん
2016/05/13(金) 07:45:26.02ID:bIkr/ix1どんなコードになってるのか、何でIEを操作してるのか、俺たちにはわからない
0212デフォルトの名無しさん
2016/05/13(金) 18:46:19.38ID:1DtqwGMj0213デフォルトの名無しさん
2016/05/13(金) 19:05:27.31ID:4KmN92Wm0214デフォルトの名無しさん
2016/05/13(金) 19:05:40.89ID:1DtqwGMjとしたらFindNextと同意なのでしょうか?
0215デフォルトの名無しさん
2016/05/13(金) 19:07:09.71ID:1DtqwGMjありがとうございます。
返信がかぶってしまったのですが、上記と同意なのでしょうか?
0216デフォルトの名無しさん
2016/05/13(金) 19:39:21.98ID:quiTtpKe0217209
2016/05/13(金) 19:41:39.39ID:mSOPxExzDim objIE As InternetExplorer
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.navigate "http://hogehoge.jp"
Do While objIE.Busy = True Or objIE.readyState <> 4
DoEvents
Sleep 1
If Now > timeOut Then
objIE.Refresh
timeOut = Now + TimeSerial(0, 0, 20)
End If
Loop
timeOut = Now + TimeSerial(0, 0, 20)
Do While objIE.document.readyState <> "complete"
DoEvents
Sleep 1
If Now > timeOut Then
objIE.Refresh
timeOut = Now + TimeSerial(0, 0, 20)
End If
Loop
Sleep 10000
For Each objtag In objIE.document.getElementsByTagName("a")
If InStr(objtag.outerHTML, "○○") > 0 Then
objtag.Click
Exit For
End If
Next
同ページ内の○○というリンクをクリックしてそのページに移動します。そして、移動したページから次のページに移動させるにもieの制御ができないのです。
上記の objtag.ClickやobjIE.document.Links(1).Clickを使っても無反応です。
0218デフォルトの名無しさん
2016/05/13(金) 19:42:21.35ID:1DtqwGMj申し訳ないです。処理が異なるというのは、
Find(検索対象,After:=検索したいもの,SearchDirection:=xlNext)
では、FindNextのように下まで検索した後、最初の一致セルに戻ってこない
という事でしょうか?
0219209
2016/05/13(金) 19:44:35.73ID:mSOPxExz任意のキーワードを入力して、自動でクリックさせています。
>>211様
言葉足らずですみません。
ExcelVBAでサイト内のaタグを自動でクリックするマクロを作っています。
0220デフォルトの名無しさん
2016/05/13(金) 21:32:30.68ID:4amCJiHYどっちが使いやすいか自分で判断するといい
Sub macro()
Dim srcRng As Range, fnd As Range
Dim firstAddr As String
Set srcRng = ActiveSheet.UsedRange
Debug.Print "■Findのみ"
Set fnd = srcRng.Find("test", LookAt:=xlWhole, SearchDirection:=xlNext)
If Not (fnd Is Nothing) Then
firstAddr = fnd.Address
Do
Debug.Print fnd.Address
Set fnd = srcRng.Find("test", After:=fnd, LookAt:=xlWhole, SearchDirection:=xlNext)
If (fnd Is Nothing) Then Exit Do
Loop While (fnd.Address <> firstAddr)
End If
Debug.Print "■FindNextあり"
Set fnd = srcRng.Find("test", LookAt:=xlWhole, SearchDirection:=xlNext)
If Not (fnd Is Nothing) Then
firstAddr = fnd.Address
Do
Debug.Print fnd.Address
Set fnd = srcRng.FindNext(After:=fnd)
If (fnd Is Nothing) Then Exit Do
Loop While (fnd.Address <> firstAddr)
End If
End Sub
0221デフォルトの名無しさん
2016/05/13(金) 21:52:33.49ID:1DtqwGMj上の
Set fnd = srcRng.Find("test", LookAt:=xlWhole, SearchDirection:=xlNext)
のところで、実行時エラー91 オブジェクト変数または With ブロック変数
が設定されていません。 とでてしまいます。
0222デフォルトの名無しさん
2016/05/13(金) 21:57:00.89ID:1DtqwGMj申し訳ありません。文字の打ち間違いでした。
0223デフォルトの名無しさん
2016/05/13(金) 22:05:27.55ID:1DtqwGMj何個かのセルにtestといれて試してみたのですが、違いがよくわかりませんでした。
0224デフォルトの名無しさん
2016/05/13(金) 22:21:28.96ID:KRWocFnH書き方が違う
動きは同じ
0225デフォルトの名無しさん
2016/05/13(金) 22:22:28.17ID:KRWocFnH0226デフォルトの名無しさん
2016/05/13(金) 22:24:18.61ID:1DtqwGMj動きが同じなら
FindNextの方が文が短くてすむ・・・くらいの認識でよいという事ですね?
0227デフォルトの名無しさん
2016/05/13(金) 22:28:41.38ID:1DtqwGMjなるほど。ありがとうございます。
どちらの方法でも目的が達成できれば書きやすい方でという事ですね。
どちらも、testをアドレスが一致するまで検索するループという認識で
よいんですよね?
0228デフォルトの名無しさん
2016/05/14(土) 00:02:13.05ID:KpaRNRq2With Sheet3.Range("A1").CurrentRegion
.AdvancedFilter xlFilterInPlace,Sheet2.Range("A1").CurrentRegion
.SpecialCells(xlCellTypeVisible).Clear
End With
という文で、Sheet3の空白で囲まれている表の範囲と
Sheet2の空白で囲まれている表の範囲が比較出来、
Sheet3の不一致の部分だけが残るというのはわかるのですが、
何故比較できているのかが理解できません。
わかる方がいたら教えて下さい。
0229デフォルトの名無しさん
2016/05/14(土) 01:59:54.31ID:KpaRNRq2どう比較しているのかがやはりわかりませんでした。
どなたかご存知でしょうか?
0230デフォルトの名無しさん
2016/05/14(土) 02:00:00.21ID:TfiX7v5QExcelのフィルタ機能があるのは知ってると思うけど
列毎に表示する基準を設定できるだろ
その設定をシート2に記述してるだけ
でspecialcellsでclearしてるから消える
clearをinterior.color=rgb(255,255,0)とか変えてみたら?
0231デフォルトの名無しさん
2016/05/14(土) 02:19:13.82ID:KpaRNRq2Sheet3とSheet2の行(レコード)同士を比較しているとは思うのですが、
Sheet3とSheet2で同じ行はあっても、何行目とか位置が違ったりしているのに、
どういう流れで比較をした結果が可視セルとしてみなされているのだろうと
思ってしまいました。
色は変えてみて、可視セルだけだけが色を塗られました。
0232デフォルトの名無しさん
2016/05/14(土) 02:27:15.10ID:TfiX7v5Q比較というより
フィルタ機能で列毎に表示または非表示にする条件を
シートにまとめて書いてるだけだって
試しにシート2で1列だけ残して他の列を全部消して動かしてみたら?
0233デフォルトの名無しさん
2016/05/14(土) 02:36:02.98ID:TfiX7v5QWith Sheet3.Range(
0234デフォルトの名無しさん
2016/05/14(土) 02:37:26.14ID:TfiX7v5QWith Sheet3.Range("A1").CurrentRegion
.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheet2.Range("A1").CurrentRegion, copytorange:=Sheet4.Range("A1")
End With
xlFilterInPlace→xlFilterCopy に変えて
コピー先をSheet4.Range("A1")に指定
Sheet3の表に、Sheet2のフィルタ条件で、フィルタした結果をSheet4にコピーする
0235デフォルトの名無しさん
2016/05/14(土) 02:40:15.99ID:KpaRNRq2Sheet3にしか存在しない行だけ色無しになりました。
0236デフォルトの名無しさん
2016/05/14(土) 02:42:52.92ID:TfiX7v5Qフィルタをクリアしてから実行した方が良い
0237デフォルトの名無しさん
2016/05/14(土) 02:49:28.56ID:TfiX7v5Qシート2の列名の下にフィルタ条件が書かれる
コードを実行すると
シート3の表にフィルタが掛けられる
その条件はシート2に書いた列でその下の値を持つ行だけが表示される
.SpecialCells(xlCellTypeVisible).Clear
をしているから、フィルタを掛けた後表示されているセルはクリアされる
その後、showallしてるからフィルタがクリアされる
結果として、フィルタ条件に合わなかった行が残る
0238デフォルトの名無しさん
2016/05/14(土) 02:50:25.32ID:NImZCMbBで開いているブックのsubが一覧表示されますが、
ここにaddinしているxlaの関数を表示させることはできないでしょうか。
fileName.xla!subName形式で直接入力すれば起動できることは知っています。
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:ghf3z0AO■ このスレッドは過去ログ倉庫に格納されています