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
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 & "*.*"

どうすれば止まらずに処理できますか
604デフォルトの名無しさん (ワッチョイ 0f8e-8UzB)
垢版 |
2019/11/07(木) 19:14:00.49ID:JuEkRQF70
>>603
自分の手で自分の頸を吊ってみればわかるぞ
2019/11/07(木) 19:14:43.23ID:A6k0oUZwx
>>603
ThisworkbookそのものをKillしようとして失敗してる
2019/11/07(木) 19:37:17.46ID:JqbJgiKT0
>>605
VBAの実行ファイルを対象から外すにはどうすればよいですか?
2019/11/07(木) 19:51:15.23ID:DHbfNndS0
>>606
ひとつずつ確認しながら消す
2019/11/07(木) 19:54:49.91ID:Hld4e4lOa
エラー処理いれる
2019/11/07(木) 19:56:45.33ID:5uk1oCuaM
>>603
On Error Resume Next
じゃダメなん?
2019/11/07(木) 19:57:11.59ID:JqbJgiKT0
>>608
ありがとうございます
611デフォルトの名無しさん (ワッチョイ 0f8e-8UzB)
垢版 |
2019/11/07(木) 20:19:39.30ID:JuEkRQF70
>>610
馬鹿は死ねよ
2019/11/07(木) 20:29:48.40ID:Hld4e4lOa
>>610
607のやり方がいいと思うぞ
2019/11/07(木) 20:32:08.30ID:DHbfNndS0
>>609
thisworkbookを消そうとした時以外でも同じエラーが出ることがある
2019/11/07(木) 20:46:34.17ID:gQ6uYn6M0
例外前提の分岐とか一番やっちゃいけないだろ
2019/11/08(金) 03:21:06.91ID:ebkgjtQt0
kill *.* とか普通は怖くてできないぞ
2019/11/08(金) 03:24:31.82ID:TcyEUh9gx
FileSystemObjectとか使えばいいのに
2019/11/08(金) 07:35:20.51ID:/14Ittk50
https://gigazine.net/amp/20191107-drum-machine-in-excel
スーパーテクを俺に継承してくれw
2019/11/09(土) 08:05:58.77ID:FLPipJw+x
>>603
Dim fso As Object
Dim fr As Object
Dim fl As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Set fr = fso.GetFolder(ThisWorkbook.Path)

On Error Resume Next

For Each fl In fr.Files
If fl.Name <> ThisWorkbook.Name Then
fl.Delete
If Err.Number <> 0 Then
Debug.Print "Err.Number:" & Err.Number &" FileName:" & fl.Name
Err.Clear
End If
End If
Next fl
2019/11/09(土) 09:04:21.85ID:DhErEMKcM
Dim wb as Workbook
...

wbが開いているか閉じられているか確認する方法ありますか?
2019/11/09(土) 09:50:21.72ID:s5KKViGX0
For Each wb in workbooks で名前やパスをチェックするとか
2019/11/09(土) 10:39:45.65ID:YT93jrBPx
>>620
そのやり方だとNASとかにある共有ファイルを他人が開いてる場合には判定不可能

>>619
対象のファイルをエクセルファイルとして開かずにVB6のOpen ステートメントの追記モードで開くのがオーソドックスなやり方
他のユーザーエンティティが編集権をロックした状態だとファイルが開けずエラーが発生することを利用する
エラーコードを調べて0より大きい場合はファイルが開かれている、そうでなければファイルが開かれていないと判断する
ただし負荷対策が最適化されていないネットワーク環境でサーバーの応答が遅くなっている場合、数分前に誰かが閉じたファイルを開いていると判定してしまうので要注意

'サンプルコード
Sub Sample()
If IsFileOpened("任意のブックのフルパス") Then
MsgBox "開かれています"
Else
MsgBox "開かれていません"
End If
End Sub

Function IsFileOpened(fliepath as String) As Boolean
On Error Resume Next
Open filepath For Append As #1
Close #1
If Err.Number > 0 Then
IsFileOpened = True
Err.Clear
Else
IsFileOpened = False
End If
End Function
622デフォルトの名無しさん (オッペケ Sr0f-I9Tk)
垢版 |
2019/11/10(日) 03:17:05.03ID:7c8MD0U8r
>>621
ブックを開いているときは~$ファイル名の隠しファイルが作られるからそれを見たら
2019/11/10(日) 16:07:54.61ID:mlZHtGvXd
行番号が1-9まで1ずつ加算されてる中で3ごとにブロックとして処理の始点を1,4,7行にしたいんだけど行番号から式で求められないかな?
for i=1to9
if i<4 and i>0 then 処理1
elseif i<7 and i>3then 処理2
else 処理3
next i
これを分岐なしでスマートに書きたい
123456789→111444777って変換式が欲しい
624デフォルトの名無しさん (ワッチョイ 0f8e-8UzB)
垢版 |
2019/11/10(日) 16:20:12.48ID:ISabdlL+0
>>623
馬鹿は小学生からやり直せ
2019/11/10(日) 16:45:02.84ID:3pDgk0W90
1引いて3で割った商を3倍して1を足すとか
626デフォルトの名無しさん (スップ Sdbf-IAD9)
垢版 |
2019/11/10(日) 16:54:56.61ID:CxUi7EKzd
VBAの時点でスマートじゃないから
2019/11/10(日) 17:03:38.70ID:ER+z1tbi0
Ruby で、

( 1..9 ).each { |i| p ( ( i - 1 ) / 3 ) * 3 + 1 }
2019/11/10(日) 17:13:45.05ID:HO+Z4H690
何でもうすぐ無くなる言語のruby何かで答えるの?アホなの?
2019/11/10(日) 17:46:44.80ID:f9aUABsd0
>>623
変換するだけなら
i - (i - 1) Mod 3
で111444777になる
3つの処理に分けたいなら
Select Case i
  Case 1, 2, 3
    処理1
  Case 4, 5, 6
    処理2
  Case Else
    処理3
End Select
2019/11/10(日) 17:48:13.51ID:3pDgk0W90
式を入れてもできそうだな
2019/11/10(日) 17:55:48.55ID:CHmVk7q0x
>>623
111777999を割り出す変換式を使うのではなく、行番号を3で割った商が1の場合だけ処理を行うようにするのは駄目なの?
例えばこんな感じ

For i = 1 To 9
If i Mod 3 = 1 Then
'処理
End If
Next
2019/11/10(日) 18:00:46.35ID:CHmVk7q0x
>>631
間違えた、3で割った商じゃなくて余りね
2019/11/10(日) 19:14:57.01ID:tOVYZh2e0
数独かな
2019/11/10(日) 19:46:34.21ID:3pDgk0W90
j = Mid("111444777", i, 1)
2019/11/10(日) 22:03:46.21ID:mlZHtGvXd
たくさんレスありがとう
>>634のが一番シンプルな気がするのでこれいただきます。

>>633
そのとおり
練習で作ってみてるんだがエスパー力に驚嘆
2019/11/10(日) 22:35:02.94ID:bOxdjs7b0
for i =1 to 7 step 3
2019/11/11(月) 06:13:38.55ID:3IE5w81qd
( x - 1 ) mod stepNum + minNum
例えば0123456789を3ずつカウントアップすると000333666になる
2019/11/11(月) 06:30:01.29ID:Q8KRogaUa
>>637
何故馬鹿は聞かれてもいない事をこたえてしまえのかw
2019/11/11(月) 08:49:23.01ID:P0z5I7y60
>>635
1-9, 3毎, ブロック
こんだけあれば可能性として浮かぶよ
2019/11/11(月) 19:59:18.13ID:oGPuZ3IA0
>>637
>>625をやろうとしてる?
641デフォルトの名無しさん (ワッチョイ 4bc4-PySg)
垢版 |
2019/11/11(月) 21:20:23.51ID:ar1IlrsX0
ブックAのUserFormのボタンから1つ下のフォルダに入っているブックBのUserFormを起動させたいのだけど、
ネットで探した「Application.run Thisworkbook.path & "\〜\ブックB!subプロシージャ名"」というのを記載して実行させたけど、
エラーになってしまいましたが、これはどこが悪いのでしょう…
2019/11/11(月) 21:24:34.26ID:oGPuZ3IA0
>>641
パス、プロシージャ名、引数のどれかが間違ってる
2019/11/11(月) 21:26:03.11ID:oGPuZ3IA0
拡張子も付いてないな
2019/11/11(月) 21:56:10.05ID:ar1IlrsX0
>>643
.xlsm!〜でもやってみたのですがダメでした。
2019/11/11(月) 21:58:12.61ID:ar1IlrsX0
ちなみに、workbook_openのプロシージャは直接subプロシージャ名を指定してもブックが開く時には通るって考えでいいんですよね?
2019/11/11(月) 22:22:57.09ID:oGPuZ3IA0
>>644
パスを'で括る
2019/11/11(月) 22:26:38.25ID:m+wKVDU/0
>>640
たぶんそうじゃない?
2019/11/12(火) 02:24:55.99ID:oo4izA1E0
>>646
application.run 'thisworkbook.path & "ブックB.xlsm'!subプロシージャ"
って書けばいいのでしょうか?
2019/11/12(火) 04:29:40.38ID:0+gbLwkM0
>>648
先頭のシングルコーテーションは&演算子で結合する

application.run 'フルパス'!プロシージャ名
という形になるようにする
2019/11/12(火) 08:36:17.42ID:l0mUz5CNM
>>649
やってみます!
ありがとうございます。
2019/11/12(火) 08:50:10.74ID:l0mUz5CNM
>>649
シングルクォーテーションにしたら…コメントアウトになりません?
…今気がついたけど…
2019/11/12(火) 08:58:18.88ID:l0mUz5CNM
>>649
すみません、自分の早合点でした。
"'" &でやればシングルクォーテーション使えましたね…
2019/11/12(火) 10:11:19.95ID:n8VUgOjjM
スレチですまん。
俺はVBAをやってるが上司から言われました。(うちの部署、10名のうち、VBAを作れる人は二人だけ、、、)

AIが集計をしてくれるからEXCELは必要ない時代が来るねと言ってた。

反論出来る?
2019/11/12(火) 10:27:44.24ID:9Ebm7+hvM
楽しみですねと答える
2019/11/12(火) 10:28:50.68ID:l0mUz5CNM
まぁAIが台頭してくる頃にはその上司は居ないだろうからスルーでいいんじゃない?

それかそのAIの設定?は誰がやるんだよっ!
そんな事も分からん様なヤツの方が必要なくない?ってw
2019/11/12(火) 11:50:40.50ID:PU6pNSMVF
AI以前に、最近のDXの流れでシステムが合理化されていって、VBAでやってるような無意味な業務自体が消滅するのが先だろうね
2019/11/12(火) 13:09:11.37ID:YXMhvVfEa
AIってまたざっくりしてるなぁ
2019/11/12(火) 13:51:05.18ID:kiUdBOPaM
○データフロー中に存在する、辻褄合わせのためのデータ加工
→業務フローの見直し、システムの改善、ETLツールの導入等により脱VBA
○ルールベースで実施可能な、機械的な意思決定のためのレポート作成
→完全な自動化により脱VBA
○ルールベースでは困難な、人間的判断を必要とする意思決定のためのレポート作成
→BIツール等に置き換えて脱VBA
AIを使うとしたらこの3番目だけど、そこまでいく前にやるべきことはいくらでもある
それをやり尽くしてAIの導入を検討する頃にはVBAなんかとっくに無くなってるはずだから、VBAとAIが直接競合することなんて無いよ
659デフォルトの名無しさん (ワッチョイ 0f8e-8UzB)
垢版 |
2019/11/12(火) 14:15:36.08ID:fOVSc9po0
現在のAIが何をやってるか知らない馬鹿ども
2019/11/12(火) 19:55:22.11ID:CeIzlsxBr
VBAが必要ないじゃなくて、EXCELが必要なくなるだからな
人間が介在する限り、なんらかのUIは必要なわけで、AIとEXCELはまったく競合しないわな
2019/11/12(火) 21:10:30.98ID:6BPOxo4o0
昔のSFみたいに透明なパイプを空飛ぶ車が走ったりロボットが何でもやってくれる世界を想像しているようなもんだろ
残念ながら現実は違ったよな
662デフォルトの名無しさん (ササクッテロレ Sp0f-9pxj)
垢版 |
2019/11/12(火) 23:57:00.45ID:NVQBnRcZp
構文ミスって無限ループが発生した時にエクセルが固まるやつはなんか対策ないんか?
2019/11/13(水) 01:01:43.28ID:1iCOkal60
>>662
Esc連打したり他のウィンドウをアクティブにしたりを繰り返してみる
2019/11/13(水) 08:52:45.90ID:dBffRhEVM
VBAよりPythonを覚えた方がいいなぁ。
2019/11/13(水) 09:27:16.58ID:QPrlUzWZd
>>661
交通事故をなくすには車を隔離してパイプの中を走らせるのが一番
ただしあと300年かかる
2019/11/13(水) 09:50:15.66ID:zYuYteZMM
>>664
低学歴がPythonやっても仕事無いぞ
667デフォルトの名無しさん (ワッチョイ fb7c-t5zK)
垢版 |
2019/11/13(水) 11:30:26.61ID:0dM9Rqjm0
いつかはExcelもPCも必要なくなる時代は来るだろうけど今は必要だからな。データ管理する以上はExcel、Accessは最後まで残りそうだけどな。
将来的に事務職がなくなれば、事務管理してる上司もいらないから、新しい仕事探したほうがいいね
Pythonだけ出来ても仕事ないよ
2019/11/13(水) 12:06:34.79ID:gzl4+/xqM
faxすら無くせないのに
2019/11/13(水) 13:00:27.19ID:cKfGi7tYa
PC無くなるのはまだ随分先だろ
2019/11/13(水) 13:55:43.47ID:aJh4//42d
紙の書類を茶封筒で送る郵便すら生き残ってる
2019/11/13(水) 15:18:04.61ID:WJRWmFcXa
学校で奨励されたためにVBAエキスパートを受験しようと思いましたが、仮にスタンダードまで合格すれば理解度はどの程度にまで到達するのでしょうか?
2019/11/13(水) 15:26:24.21ID:zYuYteZMM
その時点で世の中の自称VBAプロの半数以上よりは上だと思う
世の中のVBA使いのレベルは想像を絶するほど低いから、
少しでも何が役に立つもの作れるようになったら「VBAを使いこなせます」と言っちゃっていいよ
2019/11/13(水) 16:25:53.60ID:WaSRdoWP0
エキスパート持ってるけどやっぱり試験用の知識って感じだよ
つまらん関数の引数とか
PC環境あれば簡単に確認できるものを暗記でやる感じ
2019/11/13(水) 19:26:09.82ID:YFdnwmN50
VBAエキスパートなんかあるのか・・。
VBエキスパートではなく。

トランスフォーマー検定じゃなくて、
トランスフォーマーガム検定みたいな感じか?
違うか。
2019/11/13(水) 19:34:50.53ID:8BkVy1q9F
求められるのはVBAエスパー
2019/11/13(水) 19:58:58.25ID:YIACCBmB0
A列で適当な色でフィルターをかけて、B列の可視セルをC列の値✕D列の値にする場合はどうすれば良いでしょうか。
for each in specialcells(xlCellTypeVisible)
b.value=c.value*d.value
next
にしていますが、データ2000くらいあるとと遅いです。
b.specialcells(xlCellTypeVisible).value=を用いれば早くなりそうですが、よく分かりません。
分かる方いましたら教えて下さい。
2019/11/13(水) 20:10:53.70ID:YFdnwmN50
何だそりゃww
可視セル以外は計算しちゃいけないのか?
計算してもいいなら、全部配列に入れて計算しちゃえば?
2019/11/13(水) 20:15:05.26ID:YIACCBmB0
>>677
早速の返信ありがとうございます。
可視セル以外は変更してはだめなんです。
後だしになるんですが、黒でフィルターしたらC✕D、白ならC-Dと処理が違うためです。
2019/11/13(水) 20:15:12.55ID:6AWs9S2tr
>>676
B列にはじめから計算式入れとけば良いんじゃ
2019/11/13(水) 20:23:26.06ID:1iCOkal60
>>678
フィルタいらなくない?
色で計算変えればいいだけじゃない?
681デフォルトの名無しさん (ササクッテロ Sp0f-jIeE)
垢版 |
2019/11/13(水) 21:12:54.98ID:xS2J4sOcp
質問失礼します。
vbaからc++のdllへ引数を渡してc++で処理し、配列をvba側に返したいです。
引数で渡すものは、配列ではありません。

文字列や数値をvbaで受け取ることは出来るのですが、配列はどのようにc++から受け取れば良いのでしょうか?

お願いします。
2019/11/13(水) 21:45:08.38ID:YIACCBmB0
>>679
>>680
ボタンを押した時だけ変更するようにしたいので、式を入れるのは難しいかと思います。
またまた後だしになるんですが、他にも色々ボタンを配置して、このボタンを押すとB=Cとしたり、こっちのボタンを押すとB=1.1*Dという感じにしています。
2019/11/13(水) 21:50:01.18ID:1iCOkal60
>>682
だからボタン押した時色によって計算変えればいいじゃないかと
2019/11/13(水) 22:20:19.63ID:nTBpuTY40
このスレって北海道のハゲのおっさん来てるの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況