Excel VBA 質問スレ Part63

■ このスレッドは過去ログ倉庫に格納されています
2019/09/16(月) 19:34:59.04ID:emfTAhXr0
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part62
https://mevius.5ch.net/test/read.cgi/tech/1561303297/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/10/29(火) 19:57:54.69ID:+Y5A9Qhrp
>>501
仕事場によっては、特に銀行系は
使うもの以外勝手にインストールしてはいけないところが多々有ります。

例えばJavascriptだけ使ってればいいのに
勝手にVisualStudoやTOMCATとかをインストールすると怒られるどころか
コンプライアンスの面から仕事場を退場させられる場合もあります。

EXCELは大概どこの仕事場にも入っているから
インストールしなくても使えるだけで、
当然入れてはいけないと言われたら勝手に入れるべきではありません。

むしろ「勝手にどんどん何でもインストールしていいですよ〜」なんて仕事場があったら
そこのセキュリティはどうなってるのか疑うべきと思われます。
505デフォルトの名無しさん (ワッチョイ e394-mumX)
垢版 |
2019/10/29(火) 20:03:23.90ID:tCyp/No90
マクロを許可してる方がセキュリティ意識ゼロ
2019/10/29(火) 20:06:27.60ID:b5zWL0uJ0
開発メンバーは基本何でもできるからしょうがないだろ
Excelマクロがだめなら開発環境の言語使うわ
2019/10/29(火) 20:10:23.13ID:zvctnIdZ0
cmdとか使える時点でセキュリティも何も合ったもんじゃないと思うけどね
2019/10/29(火) 20:22:40.07ID:OodB9NB80
>>496
>>497
目から鱗ですありがとうございます
早速明日試してみます
2019/10/29(火) 20:28:16.99ID:OodB9NB80
>>503
ご教授ありがとうございます
めっちゃすっきりしました
やっぱり1人でうんうん悩むより聞いた方が早いですね
勉強になります
2019/10/29(火) 23:06:14.03ID:G3O8ZbaI0
鱗付いてるとか爬虫類かよ
511デフォルトの名無しさん (ワッチョイ cf8e-FPtM)
垢版 |
2019/10/29(火) 23:35:46.46ID:CZCLEAoQ0
>>502
死ね、クズ
2019/10/30(水) 10:46:19.82ID:YBm8xQnu0
>>510
爬虫類のわけないだろ
2019/10/30(水) 10:55:31.55ID:YKBvUaHsd
>>441
>>443
少し組める人は絶対にSelectを使わないという姿勢で組むものです。
何故なら無駄である上に速度が低下するので百害あって一利無しだからです。
しかし、ごく一部Selectしないと実現出来ない処理があります。
形式を選択して貼り付ける処理などがそれです。
それから>>443さんのおっしゃるようにユーザーに選択している場所を提示するためにわざとSelectする場合もあります。
2019/10/30(水) 11:02:18.69ID:YKBvUaHsd
>>501
結構多いし、そもそもExcelだけでどうとでもなるから。
能力の低い奴はExcelのせいにするけど、こっちは君が対応出来ないことも出来るんだよ。

確かにどうにもならないことならその時にはじめて他のソフトを検討するけどね。
2019/10/30(水) 11:04:17.20ID:YKBvUaHsd
>>503
>>509
配列の設計はどうにもならんの?
別に1始まりにも出来るし、2次元にすればもっと良い。
2019/10/30(水) 11:07:13.09ID:YKBvUaHsd
>>504
勝手に入れる奴はそもそも居ないでしょ。
Excelは大概どこの仕事場にも入っているのは事実だけど、それが理由ではない。
入っていなければ最初から選択肢に無いし、このスレに書き込んでもいない。
2019/10/30(水) 17:43:14.91ID:qmgosQ7XM
>>487
>>488
Dim i As Integer
Dim n As Integer
Dim 検索値(0 To 3) As String
n = 1

For i = 1 To 4

If Me.Controls("CheckBox" & i).Value = True Then
検索値(n) = Me.Controls("CheckBox" & i).Caption
n = n + 1
End If
Next i

ActiveSheet.Range("$A$1:$J$41").AutoFilter Field:=2, Criteria1:=Array(検索値), Operator:=xlFilterValues


素人ながらにこんな感じで書いてみたのですが、こうするとチェックした項目だけでなく空白セルもautofilterもかけてしまいます。
どうしたら空白セルを除外することができますか?
2019/10/30(水) 20:32:13.04ID:xO9FzZTbr
end ifの前にredim preserve 検索値(i)は?
519デフォルトの名無しさん (ワッチョイ e394-mumX)
垢版 |
2019/10/30(水) 20:57:54.67ID:LQeJyD4+0
VBAのユーザーフォームはWindows98の時代で止まったまま
あれじゃあ恥ずかしいよね
2019/10/30(水) 21:12:32.09ID:q2N5Gpbg0
2019でファイルを開いた時に、勝手にコンボボックスのクリックイベントが発動するんだけど、何で?
もちろん、ワークブックのクラスには何も書いてない状態。
2013ではそんな事なかったと思うんだけど。
このせいで、一切編集せずに閉じようとしても、いちいち保存するか聞いてくる。
2019/10/30(水) 21:15:30.81ID:CYvJIfr60
>>517
だいたいそんな感じですね。
以下で行けました。(Dim文、略)
Control名いじるのが面倒なので、FrameにChkBox
つっこんで回しています。

iCnt = UserForm1.Frame1.Controls.Count - 1
ReDim ARR(iCnt)

i = -1
For Each vBuf In UserForm1.Frame1.Controls
  With vBuf
    If .Value = True Then
      i = i + 1
      ARR(i) = .Caption
    End If
  End With
Next

ActiveSheet.Range("範囲").AutoFilter _
  Field:=1, _
  Criteria1:=ARR, _
  Operator:=xlFilterValues
2019/10/30(水) 21:19:32.90ID:JfXI2Ieyx
>>520
アドインでアプリケーションレベルのイベントハンドラ動かしてるとかじゃないの
2019/10/30(水) 21:22:06.27ID:naugAKCN0
ワークブッククラスの話までできるなら切り分ければいいのに。
2019/10/30(水) 21:37:14.35ID:q2N5Gpbg0
>>522
アドインを無効にしたり、
ワークブックオープンイベントの最初にEnd入れてみたりしたけど、ダメだった。

>>523
最悪は違う手を考えるけど、こんな変な仕様だったのか?と思って。
2019/10/30(水) 21:39:34.26ID:q2N5Gpbg0
↑ワークブックオープンイベントの最初にEndって、アドインの方ね。
2019/10/30(水) 21:45:25.88ID:q2N5Gpbg0
↑クリックイベントだけじゃなくて、チェンジイベントもだった。
何もチェンジしてないっての。
2019/10/30(水) 21:54:49.68ID:JfXI2Ieyx
>>525
Worksheet_Activateイベントあたりが悪さしてるんじゃないの
シートイベントってほんとにゴチャゴチャになりやすいから
2019/10/30(水) 21:55:52.89ID:gwpyZLjKM
ある数値が範囲(***-***)や、範囲と単体の組み合わせを、カンマで区切っているのを降順に配列に格納したいけど、なんか上手くいかないです。

全部VBAでやろうとしているから…なのかな?と思い始めてます。
それ用のシートを作って、そこに1つずつ入れてソートさせた方が簡単…なのでしょうか?
2019/10/30(水) 22:06:31.14ID:JfXI2Ieyx
>>528
10, 5, 1-3, 6 7-9, 11
みたいに数字が並んでるのを、カンマ区切りの文字列ではなく数字の評価をした上で降順ソートしたいってこと?
まず今手元にあるコードを書いてくれ
2019/10/30(水) 22:18:54.50ID:q2N5Gpbg0
>>527
それも見たけど、ないなぁ。
ていうか、コンボボックスが置いてあるシートがアクティブじゃなくても発動するし。

2013では、VBAでオブジェクトにフォーカスを移すと、
初回のみカーソルが見えなくなる現象が起きたと思うけど、
その対策として何かやってたりして。
2019/10/30(水) 22:21:08.45ID:TIjegGw30
>>528
VBAでもシートに書き出してからでもどっちも大した手間は無いよ
まず範囲を1-3なら1,2,3と展開して全体をカンマ区切りだけにしてから、
前者なら配列に格納→配列の中身を降順でソート
後者ならシートに貼り付け→ソート機能使えばいい
2019/10/30(水) 22:34:12.92ID:JfXI2Ieyx
>>530
実装レベルでの不具合の可能性もあるし、ブックのxmlだけが壊れてる可能性もある
コンボボックス以外のオブジェクトの挙動は試してみた?
2019/10/30(水) 23:11:10.26ID:iRK6fdCa0
>>529
すまん、コード会社にあるから書けないけど、やりたい事はそんな感じ。

最初にカンマでsplitして配列に入れてからfor〜nextで0からuboundで最後まで繰り返して「-」になってる範囲を数字にバラしてその間の数字を作って配列に入れ直して…

とかやってたらコードぐちゃぐちゃ、頭の中もぐちゃぐちゃに…orz
534デフォルトの名無しさん (ワッチョイ cf8e-FPtM)
垢版 |
2019/10/30(水) 23:22:56.07ID:rL303qhu0
>>533
馬鹿には無理ってことだよ
2019/10/30(水) 23:42:55.97ID:+vGa/LGgH
ソートを自前で書くのは速度的にもメリット無いし作業シート用意した方がいいと思う
そういうとこで苦労するのはちょっと時間の無駄かなとも思うし
2019/10/30(水) 23:56:52.02ID:6F3AzkQ1x
>>533
配列を作るところまでは多分いけるんだろうけど、問題はソートなんじゃないの?
配列のソートをサポートしてる.NETのArrayListオブジェクトはVBAでも使えるので、CreateObject("System.Collections.ArrayList")でインスタンス生成してAddメソッドで配列を渡して使うといいよ
Revereメソッドを噛ませてからToArrayメソッドで再度配列化して配列変数に再格納すれば一発で降順ソートされた配列を取得できる
2019/10/31(木) 01:50:11.06ID:Xu0ModTh0
Excel2016/32bitで作成したマクロをExcel2019/64bitのパソコンに移動すると途中でExcel自体が落ちてしまいます
この場合、2019にしたこと、64bitにしたこと、どちらが原因と考えられるでしょうか?
2019/10/31(木) 06:48:15.19ID:P+363w9Wa
そのくらいしらべられないの?
2019/10/31(木) 08:04:58.17ID:6oU9RGLEx
>>537
動かないマクロファイルのファイル形式は?
2019/10/31(木) 10:03:55.60ID:Xu0ModTh0
>>538
調べてもわかりませんでした
>>539
xlsmです
2019/10/31(木) 10:04:33.47ID:Xu0ModTh0
ちなみに動く時もありますがたまに落ちるという不安定な状態です
542デフォルトの名無しさん (ワッチョイ de8e-D9gH)
垢版 |
2019/10/31(木) 11:41:33.83ID:EmOHV2200
また馬鹿が来た
2019/10/31(木) 12:23:33.00ID:aNgqFqurd
>>540
何をどう調べてどういう結果になったの?
2019/10/31(木) 12:30:33.86ID:oEJHLRECM
533です。
結局分割をしたデータをセルに置いてソートをさせて配列に入れるコードで問題なく動きました。
ありがとうございました。
変にVBAてわ全てやろうとせずにすればここまで時間かけずに済んだのですね…orz
2019/10/31(木) 12:42:50.28ID:H1H2bMOCM
どうせマクロ作った奴が手抜きしててエラーになったらApplication.Quit()してるとかじゃね
みんなエスパーじゃないんだからコード上げられないなら自分でチマチマデバッグしなよ
2019/10/31(木) 16:13:16.49ID:yyoRZlBtM
>>518
>>521
ありがとうございます
2019/11/01(金) 00:20:58.64ID:bbcNS1Ni0
VBSスレが過疎り過ぎているのとWSHのスレが無いことから、ここでVBSの質問させて下さい。

WshShellのRunメソッドを使ってTortoiseSVNのダイアログを呼び出すプログラムを書いているのですが、引数1を入れてもウィンドウが最前面に来てくれません。
Runした後にAppActivateメソッドを使ってもだめです。誰か、解決策をご存じの方、よろしくお願い申し上げます。
2019/11/01(金) 00:46:23.89ID:txYCNlM40
tortoiseSVNとやらを触った事ないけど、
tortoiseSVNだけ起こる事象なの?他のNotepadとかでは試しました?
2019/11/01(金) 01:08:36.00ID:txYCNlM40
spy++とかで窓id探ってapi使ってhandleできないかな
2019/11/01(金) 01:38:24.11ID:txYCNlM40
>>536
レコードセット以外にも色んな方法があるものだね。勉強になったありがとう。
551デフォルトの名無しさん (ワッチョイ 0b7c-qp9g)
垢版 |
2019/11/01(金) 16:54:14.94ID:BenAXzvv0
こちらのページ(https://www.sejuku.net/blog/99122)に記載されている
PDFをテキスト抽出してエクセルに貼るマクロを利用したいのですが、
ファイルとフォルダのパスを固定した記述になっているため、
ベースとなるPDFファイルを選択できるようにしたいのですがどなたか教えていただけないでしょうか。
↓のアスタリスク部分をどうにかすればと2時間戦いましたがどうにもできませんでした...

'PDFのデータをExcelに読み込むメイン処理
Sub Main()
'PDFファイルをテキストに変換するための定数を用意
* Const fileName = "*****"
* Const folderPath = "C:\Users\*****\"
Const pdfFilePath = folderPath & fileName & ".pdf"
Const txtFilePath = folderPath & fileName & ".txt"
'PDFファイルをテキストに変換
Call convPDFtoText(fileName, folderPath, pdfFilePath, txtFilePath)
'テキストデータをExcelに読み込む
Call importTxtData(txtFilePath)
End Sub
2019/11/01(金) 18:51:05.73ID:tcQFOgygr
>>551
GetOpenFilenameでパスとファイル名を取得
2019/11/01(金) 19:03:05.01ID:qpEsTrFRp
>>536
.Netのオブジェクトが使えるというのは
正直目からウロコだった。

いいね。.Net使いの俺からすると
機能に制限があるとは言っても有り難い。

ただ、参照設定して使っても
インテリセンスが効かないのが
ちょっと玉に瑕だけど。
2019/11/01(金) 19:13:41.95ID:VrCKg/E/0
>>532
試してないけど、クリック→ドロップボタンクリックにしたら発動しなくなったから、もうそれでいいやw
1クリックで2回動くのが嫌だけど。
いちいち、2回に1回Exitする処理入れないといけないし。
2019/11/01(金) 19:19:03.89ID:VrCKg/E/0
↑ダメだったwww
発動しないけど、何もしてないのに保存しますか?って聞いてくる現象が直ってないww
イベント関係ないのか。
2019/11/01(金) 19:19:33.63ID:uwtpA0hM0
>>553
IListインターフェースを通せばメンバが見れる
2019/11/01(金) 21:38:56.17ID:GexbRJ7D0
>>553
スニペット出す方法あるよ
2019/11/02(土) 10:38:29.89ID:Rmc9OzBRM
>>557
教えて
2019/11/02(土) 11:50:26.19ID:Wmiw+MGb0
>>552
定数を変数にしてファイル名だけの取得を別に作成したらできました!
ありがとうございました
560デフォルトの名無しさん (ラクペッ MMfb-KqWR)
垢版 |
2019/11/02(土) 17:21:27.20ID:ZDwGDXirM
>>557
CreateObjectせず使う方法があるのか
2019/11/02(土) 17:29:13.96ID:wtbfu1Hrd
ペニスット
2019/11/02(土) 17:58:11.63ID:71SUtLbe0
わかる
2019/11/02(土) 18:30:05.20ID:PiAf5Ioqa
VBAスレはみんな頭悪そうだなぁ
2019/11/02(土) 19:38:01.12ID:iaRIGfJY0
>>561
誰もが思うよな
2019/11/02(土) 19:39:08.44ID:FVhvHALx0
面白いこと考えるよな。
シートに貼ってソートか、SQLのORDER BYしか思いつかんかったわ。
2019/11/02(土) 23:15:53.80ID:yMKMWSCL0
>>563
見下したところでお前のほうが格上になったわけじゃないんだぜ
2019/11/02(土) 23:34:47.29ID:FVhvHALx0
ん?
>>563は、自分が頭良いとは言ってないのでは?
ここの回答者よりも高度な回答例は書けないようだし。
書けたら格上を認めてあげても良いけど。
2019/11/02(土) 23:38:18.19ID:neC/7x9UM
>>566
いちいち構うなよ…
2019/11/03(日) 00:02:25.36ID:uWoEfwnV0
おならが止まらん
2019/11/03(日) 04:16:21.62ID:C9sdk88g0
ユーザーフォームが表示されてる状態でキーボードのキーの組み合わせ(ctrl+何かとか)をした際にだけ、フォーム上に表示される様にするにはどう言ったコードにすればいいでしょう?
2019/11/03(日) 05:12:05.86ID:dj0payfvx
>>570
UserFormのKeyDownイベントで拾う
たとえばUserFormの上でCtrlキーとAキーが同時に押されたときにCommandButton1を表示するという処理なら下のようになる
押された文字キーを示すキーコードは引数KeyCodeに定数で格納されるけど、Aキー以外の文字キーにしたいなら定数は自分で調べてくれ
あと次からは何を表示したいのか目的語をきちんと書くように

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = 65 And Shift = vbCtrlMask Then Me.CommandButton1.Visible = True

End Sub
2019/11/03(日) 05:37:41.26ID:ZKxIvhRAM
Withってコーティングの手間を省く、見映え以外に良いこと有りますか?
2019/11/03(日) 06:42:19.84ID:RKQY4+qlM
>>572
Dim S As Xxx
Set S = Yyy
S.Abc = …
S.Def = …
より
With Yyy
.Abc = …
.Def = …
End With
の方が微妙に速いとかもあったかも
まあ気にするほどの差はない
2019/11/03(日) 08:20:53.85ID:C9sdk88g0
>>571
ありがとうございます。
今までユーザーフォームって苦手でほとんど使った事なかったのですが、今携わってるシステムは使ったほうが使い勝手良くなるので…
2019/11/03(日) 09:38:51.22ID:459Gcksu0
まず変数名を考えなくて良いという点、
それから、end with で破棄(解放)される点
2019/11/03(日) 13:54:04.03ID:dj0payfvx
逆にWithステートメントで取得した参照がEnd Withまで静的に保持される点は注意すべきポイントでもある

例えばWith ActiveSheet で始まるWithブロック内で他シートをアクティブにしても、ドットでアクセス提供されるメンバの親はWith宣言時点のActiveSheetになるからな
577デフォルトの名無しさん (ドコグロ MM02-l9Pq)
垢版 |
2019/11/04(月) 01:41:27.33ID:uMNIwQlPM
Withの読み方はウイズだと思うけど書くときの頭の中はいつもウイテンなのは俺だけなのかな
2019/11/04(月) 02:38:13.83ID:C7VrCGoL0
読み方があってるかどうか不安なのはあるな。
ナンバーフォーマットローカルとか。
2019/11/04(月) 02:46:05.97ID:Y6Gluo6PM
バリアントであってる?w
2019/11/04(月) 03:13:21.06ID:C7VrCGoL0
最初は、ヤッホージャパンって何だよwwwって思ったな。
2019/11/04(月) 03:53:28.93ID:CYpqTCzkx
むかしFalseのことファルスって読んでた
ファルスがギリシャ語で陰部を意味する単語だと知ったのは最近
2019/11/04(月) 09:39:04.15ID:gB0LOFjS0
滅びの呪文
2019/11/04(月) 14:50:42.78ID:O9lg7NQ30
w
584デフォルトの名無しさん (ワイーワ2 FF82-Se/k)
垢版 |
2019/11/05(火) 18:34:38.01ID:CrKvYzfVF
DataObjectオブジェクトについて https://chiebukuro.yahoo.co.jp/

0OM
585デフォルトの名無しさん (ラクペッ MMfb-KqWR)
垢版 |
2019/11/05(火) 18:44:36.75ID:v4Zm9Tj+M
>>581
20年以上ファルスと読んでた。最近Youtubeでフォルスだと知った。Bluetoothを何度教えてもブルースと読む同僚を笑えない。
2019/11/05(火) 18:50:10.04ID:W9mxYkl/d
>>585
ワイの周りにもファルス詠みはたくさんいる。中高の英語の勉強で発音記号見たことあるはずなのに
2019/11/05(火) 19:54:14.94ID:zWfG7OZu0
教えてくれた先生がファルスだったので周りもみんなファルス読み
2019/11/05(火) 20:22:41.01ID:JryaN2pta
上司からフォルスで教わった
589デフォルトの名無しさん (ワッチョイ 6f5f-ANgw)
垢版 |
2019/11/05(火) 21:16:39.16ID:rpaa5EWu0
フォルス?フォールスだろ?
英語知らんのかな
2019/11/05(火) 21:29:26.89ID:hUdA7EQo0
ファーストフードがいつの間にかファストフードになってるようなもんだろ
591デフォルトの名無しさん (ワッチョイ 6f5f-ANgw)
垢版 |
2019/11/05(火) 21:32:19.18ID:rpaa5EWu0
いや単にバカなだけだろw
2019/11/05(火) 22:00:02.40ID:Y2zra18+0
>>589
発音記号みると、どっちもあるみたいだね。
2019/11/05(火) 22:35:00.66ID:ah8KxcV+0
カタカナに当てはめるんじゃないfalseはfalseだぜ
2019/11/05(火) 22:50:55.14ID:yUheLICMa
ファォッルスッ!
2019/11/05(火) 22:52:22.61ID:ah8KxcV+0
ふぁっぁく!
2019/11/05(火) 23:47:59.23ID:7oZHxMow0
野球のファールみたいなもんだろ
よってファールスで
597デフォルトの名無しさん (ワッチョイ de61-DOEl)
垢版 |
2019/11/06(水) 06:04:23.35ID:jiZZUv+M0
LCase 関数 VBA http://vba-auto.com/lcase_function_vba/

B5F
598デフォルトの名無しさん (ワッチョイ de61-DOEl)
垢版 |
2019/11/06(水) 06:44:01.06ID:jiZZUv+M0
CBool 関数 VBA http://vba-auto.com/cbool_function_vba/

TDL
2019/11/06(水) 19:00:52.62ID:XsHQlDv60
ん?
ムサンバニかモーサンバーニーかっていう話?
2019/11/06(水) 19:53:02.84ID:3KrvKGm6a
ピッツァのことか
601デフォルトの名無しさん (オッペケ Sr0f-I9Tk)
垢版 |
2019/11/07(木) 00:18:34.56ID:Vgod5FHRr
すみません。
最新のWindows10でVBAを実行したところ、VBScript.RegExpのCreateObjectに失敗しました。
IEのVBS機能が無効化された影響によるものでしょうか?
回避策等ありますでしょうか?
2019/11/07(木) 03:57:12.24ID:sFRacxbxx
>>601
試してないけどJScriptを使ったらどうかな
32bit環境ならScriptControl オブジェクトをCreateObjectで生成してJScriptの正規表現を使う
62bit環境ならMSHTMLオブジェクトでIEのエンジンのJScript実行環境を生成して、そこからJScriptの正規表現を使う
2019/11/07(木) 19:03:46.63ID:JqbJgiKT0
同じフォルダ内の他のファイルを削除しようとすると
ファイルは削除されますが、
「実行時エラー'70': 書き込みできません。」
がでて処理が止まります。
Dim aa As String
aa = ThisWorkbook.Path & "\"
Kill aa & "*.*"

どうすれば止まらずに処理できますか
■ このスレッドは過去ログ倉庫に格納されています