Excel VBA 質問スレ Part58

■ このスレッドは過去ログ倉庫に格納されています
2018/11/19(月) 06:47:24.99ID:Qq88xGOU
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


※前スレ
Excel VBA 質問スレ Part57
https://mevius.5ch.net/test/read.cgi/tech/1536583359/
2019/01/24(木) 15:36:46.38ID:xR9TqB96
罵倒芸術?
653デフォルトの名無しさん
垢版 |
2019/01/24(木) 15:53:26.03ID:DfMDGTcZ
>>651
そうします
ありがとうございます
2019/01/24(木) 16:52:58.88ID:90ICJGKL
>>651
お前なにしにきてんだここに。
最低だな、人として。
2019/01/24(木) 17:31:43.23ID:uc3iE4iQ
>>642で答えを教えてもらっても理解できないような頭の悪さが問題だろう。こんな頭の悪い奴はプログラムするなと俺は思う。
656デフォルトの名無しさん
垢版 |
2019/01/24(木) 17:52:28.54ID:Ay2CLdQj
ほー
>>655くらいの天才になると最初からプログラム完璧に理解できたらしいな
凄い凄い

>>653
めげずに頑張ってくれよ
だれでも最初は初心者だ
2019/01/24(木) 18:00:27.00ID:A3Pe4Ldy
VB6で作ったADOを使ってデータベースからエクセルシート名をComboBoxに入れるソフトがあって、それをwindows10で動かすとエラーで止まるんだけど原因分かりますか?
シート名が一文字の時だけエラーが出るのは分かったけど何か理由だと思いますか?
658デフォルトの名無しさん
垢版 |
2019/01/24(木) 18:15:16.93ID:pEQDGUsa
>>657
ここが何のスレだかわかってるか、馬鹿
2019/01/24(木) 18:58:14.37ID:5lzQ1hz1
>>640
その日付でアドバンスフィルタ。
検索する側の日付と、検索される側の日付は、
何型でもいいから統一する。
LeftやMidと"/"を組み合わせとか、
Format(日付, "yyyy/mm/dd")とか適当に。
2019/01/24(木) 19:06:26.31ID:5lzQ1hz1
アドバンスフィルタが何なのかわからなかったら、
フィルタオプションの設定の使い方を覚えて、
マクロの自動記録をするといい。

ちなみに、ループより激速だから。
2019/01/24(木) 19:32:10.91ID:fZR3dOZW
>>640-642
Ruby で作った

# 各行は空白で区切った、3列の配列。
# 全行は各行の配列、つまり配列の配列
all_rows = File.readlines( "input.txt" ).map( &:split )

# row[ 2 ]、金額が最大数値の行を求める
p max_row = all_rows.sort_by { |row| row[ 2 ].to_i }.last

# 全行からrow[ 0 ]、同じ日付の行だけを集める
p all_rows.select { |row| row[ 0 ] == max_row[ 0 ] }
2019/01/24(木) 21:13:39.94ID:52bEuJTy
>>661
ここが何のスレだかわかってるか、馬鹿
663661
垢版 |
2019/01/24(木) 21:19:22.76ID:fZR3dOZW
>>661
修正

# row[ 2 ]、金額が最大数値の行を求める
>p max_row = all_rows.sort_by { |row| row[ 2 ].to_i }.last
p max_row = all_rows.sort_by { |row| row[ 2 ].to_i * -1 }.first

last だと、最後まで配列を作ってしまう。
一方、first では最初の1つだけを求めるから、速い
2019/01/24(木) 22:01:17.17ID:KN/tNrgV
>>661
ボクタンンRubyが出来るんだぞぉおエライんだ。ボクタンンを褒めろぉぉお
Rubyのスレでは褒める奴が居ないからここでエラぶりたいんだよぉお
なウスラバカ
2019/01/25(金) 09:26:57.52ID:VDjD4/gW
他言語質問スレの質問をRubyで解答するスレでもたてれば?
2019/01/25(金) 10:27:26.03ID:OaoSScvY
Rubyスレで相手にされず、ここならドヤ顔できるだろと思って来たのかw
667デフォルトの名無しさん
垢版 |
2019/01/25(金) 12:18:15.80ID:aKVOVgYE
プロさん荒ぶりまくっとってワロタw
2019/01/25(金) 12:37:49.55ID:kDiuvRrn
Ruby信者くんどこのスレでもKYだよね
669デフォルトの名無しさん
垢版 |
2019/01/25(金) 12:52:29.05ID:EnRgcOgq
dumpbin /exports hoge.dll

lib /def:hoge.def
でいけるな
2019/01/25(金) 19:43:02.79ID:EKURiA+R
DispCallFuncって最近また流行ってるの?
2019/01/26(土) 07:48:55.80ID:SzhvFgNa
Private Function getIE(arg_title As String) As InternetExplorer

こういう書き型ってどういう意味になるんですか?
普通に関数を作るなら
private fanction 関数名(ByVal 引数名 as 引数の型)
みたいな形になると思うんですが
上記にあげた例でとくに引数を()で閉じた後のas InternetExplorerの部分がよくわかりません
2019/01/26(土) 08:30:57.60ID:0//Vwm17
>>671
"as 引数の型"の意味が理解できるなら
"as InternetExplorer"は簡単に想像つくだろ
2019/01/26(土) 09:22:53.54ID:xtvWXKE/
Private Sub 関数名(引数名 As 引数の型)
Private Function 関数名(引数名 As 引数のデータ型) As 戻り値のデータ型
674デフォルトの名無しさん
垢版 |
2019/01/26(土) 09:34:59.74ID:HSTKeB2g
VBAやってるなんて恥ずかしくて言えないだろ?
2019/01/26(土) 09:38:00.59ID:+NbQI97A
>>671
中の処理を見ないとわからんけど、
そういう書き方をする場合、普通に考えたら、
getIEにInternetExplorerのオブジェクトがセットされて返ってくる。
2019/01/26(土) 09:49:01.06ID:/P2VC+Mr
タイトルバーの文字列からウィンドウを検索する関数だろ
IE操作のサンプルとして、ネットでも本でも色んな所で見かけるやつ
2019/01/26(土) 09:59:33.30ID:0//Vwm17
>>674
あらたまって「俺VBAできます」なんて言うことは無いけど
問題の解決にVBAが最善なら偏見持たずに採用するよ
2019/01/26(土) 10:13:39.98ID:54XYYYdu
初心者に優しくなろうぜ
2019/01/26(土) 10:33:16.30ID:MaEquCGy
どうしても使わなきゃならない場合にはVBAを使う
なにも理由がなければこんなもの使わない方が精神的に健全
680デフォルトの名無しさん
垢版 |
2019/01/26(土) 10:56:55.38ID:z7S/RMkn
Windows10のアップデート1809を適用したらcreateobject("InternetExplorer.application")でオートメーションエラー(実行時エラー -2125463506)が発生するようになりました。

これを回避する方法があれは教示ください。
2019/01/26(土) 11:00:34.08ID:MaEquCGy
>>680
他の言語とSeleniumを使う
2019/01/26(土) 11:08:46.81ID:+NbQI97A
>>680
参照設定もInternetExplorerMediumもダメ?
683デフォルトの名無しさん
垢版 |
2019/01/26(土) 11:09:00.46ID:z7S/RMkn
>>681
会社の方針でOffice以外のアプリや言語は使えません。そのため、VBAのみとさせてください。
2019/01/26(土) 11:13:02.00ID:MaEquCGy
>>683
ではIEも使えないのですね?
685デフォルトの名無しさん
垢版 |
2019/01/26(土) 11:17:13.78ID:z7S/RMkn
>>682
参照設定はInternetcontrolsとHTML object libraryを設定しています。これは適用前と変わりません。

New InternetExplorerMediumでもおなじエラーが発生します。

1809適用前の他PCでは正常に動きます。
686デフォルトの名無しさん
垢版 |
2019/01/26(土) 11:18:26.43ID:z7S/RMkn
>>684
すみません、クロームやエッジは使えませんが、IEは可能です。
2019/01/26(土) 11:32:26.37ID:MaEquCGy
なるほど状況はわかりました

問題の検証にはまず最初に他の言語が必要です
パワーシェルの使用許可を取ってください
2019/01/26(土) 12:31:44.07ID:WRAGgpBx
>>683
マジメな話、本当にダメなのかは思い込みの部分が多いんじゃないかと思うぞ
2019/01/26(土) 12:33:07.15ID:SzhvFgNa
>>672
>>673
>>675
ありがとうございます。VBAは戻り値の型も指定できるんですね。
というか、思い出しました、C言語でも頭にstringとかintとかつけましたね。
あれが末尾に来てこういう書き方になると。
ありがとうございました。
2019/01/27(日) 07:11:52.32ID:KwlBhw9C
しかしVBAは良くて他がダメっておかしな話だな
使い勝手が違うだけで、大概の事出来ちゃうだろ
2019/01/27(日) 07:15:14.02ID:MJttX1my
>>690
VBAの利用を推奨していないのは他でもないMSだ
2019/01/27(日) 07:25:44.98ID:v6cey9sT
逆に、C#にできてVBA+APIでできないことって何がある?
2019/01/27(日) 07:37:49.03ID:94l2cllZ
ソフトウェアが端末毎に異なると動作検証の障害になるケース
2019/01/27(日) 07:53:57.32ID:e7HDIdYV
もうよそいけよ
695デフォルトの名無しさん
垢版 |
2019/01/27(日) 08:13:04.45ID:/fU4frLP
IE参照とか終わっとる
2019/01/27(日) 08:29:08.12ID:MJttX1my
>>692
そらWebアプリとかスマホアプリとかMac/Linuxとかゲームとか科学技術計算とかいくらでもある
VBA(API, COMなし)で無理なく可能、かつExcelワークシート操作が必要な場合に態々C#を使うのはそれこそ馬鹿の一つ覚えだと思うけどね
2019/01/27(日) 08:59:08.57ID:DsJJt6N4
希に、変数が定義されてませんみたいなエラーが出るんだけど、何だろう?
しかも変な位置で。

Dim a As Long : a = 1
Dim b As Long : b = 1
MsgBox a        ←普通、aにエラーが出るとしたらここだけど、
Cells(a, 1).Value = b ←なぜかこの時点で出る

Excelを再起動しても治らないんだけど、
3行目と4行目を入れ替えて、また戻すと治る。
わけわからん。
2019/01/27(日) 09:48:02.97ID:UZak3JEV
>>697
参照設定を確認かな…
2019/01/27(日) 11:10:55.75ID:RJ6yXKbG
>>697
当方、excel2010の新しいブックでテストしても何の問題もなし
2019/01/27(日) 12:04:29.48ID:5DHtGtFO
>>697
> MsgBox a
で値は表示されてるのか?
表示されてるなら値はどうなっているのか?
2019/01/27(日) 12:48:15.98ID:TaAzn7Fo
>>697
全角空白とか混ざってない?
マルチステートメントもやめよう
2019/01/27(日) 14:13:43.46ID:eEXpRKk5
マルチステートメント推進
2019/01/27(日) 15:18:35.61ID:g3iq6aIo
まじ?
2019/01/27(日) 16:30:18.65ID:DsJJt6N4
>>698
特殊なものはつかってないけど・・。

>>700
表示前にエラーになったから見てないや。

>>701
VBSで全角空白がダメなのは知ってるけど、VBAでは実行できてたので、気にしてなかった。
マルチステートメントって「:」使うやつ?
2019/01/27(日) 16:31:28.53ID:DsJJt6N4
↑途中送信しちまった。

Constは1行で書けるのに、Dimが2行になるのが嫌なので、宣言は1行にしてる。
2019/01/27(日) 16:33:56.14ID:DsJJt6N4
>>699
こっちは2013。
普通は問題ないんだよ。行を入れ替えて戻せば治るから、
構文的におかしいことも無いだろうし。
2019/01/27(日) 18:01:05.46ID:OBIAkwM2
コードのコピペをミスったとかじゃないかな
どこか編集すると大文字小文字や空白が自動的に修正されて直るとか
2019/01/27(日) 18:29:58.57ID:k4Sj+hy8
>>697
たぶんデバッグ中に宣言書いたりしたんやろ?
そう言うことするとバグる。

一旦コードコピーして、モジュール作り直せばいいよ
2019/01/27(日) 18:33:24.52ID:qv2Aznbx
そもそも1列目にはどんな数字が羅列されてるの
2019/01/28(月) 20:10:52.48ID:i9xb9DBB
1行目にデータを取って2行目に1行目を参照したmid関数を1行目と同じ数だけ用意したいのですが

Dim m As Integer
m = 1 'カウンタmを用意して1を設定
Do While Cells(m, 1) <> "" '1行目が空になるまでループ
Cells(m, 2).Formula = "=mid(" & Cells(m, 1) & ",15,5)" '2行目には真横のセルを参照したmid関数を入れる
m = m + 1
Loop

これじゃダメなんですが、4行目のmid関数をセルに代入するとき相対的にcells(m,1)を参照させていきたいんですが
どういう風に書けばいいんでしょうか?
2019/01/28(月) 20:41:36.83ID:9NcZtM+2
Cells(m, 2).Formula = "=MID(" & Cells(m, 1) & ", 15, 5)"

Cells(m, 2).FormulaR1C1 = "=MID(RC[-1], 15, 5)"
2019/01/28(月) 20:42:27.70ID:9NcZtM+2
みすった
Cells(m, 2).Formula = "=MID(" & Cells(m, 1).Address & ", 15, 5)"
2019/01/28(月) 20:47:12.92ID:i9xb9DBB
ありがとうございます、いけました!
2019/01/29(火) 18:20:14.94ID:uYHQBjCX
1から30の乱数字を5回ループした合計を出したい。
同一数字が出ることをよしとした場合のコードってどんなですか?
2019/01/29(火) 18:28:48.64ID:ywRkqTQf
>>714
For i = 1 To 5
  s = s + Int(Rnd()*30+1)
Next

細かいことを言うと、「同じ数字が出てはいけない」などの条件を付けた時点で、それは乱数じゃなくなる
2019/01/29(火) 19:08:34.73ID:+icPBYbY
>>715
> 細かいことを言うと、「同じ数字が出てはいけない」などの条件を付けた時点で、それは乱数じゃなくなる
べつに乱数が欲しいとは言ってないようだが?
2019/01/29(火) 19:40:09.62ID:dBY1qrqG
「乱数字」ってなんだ?初めて聞く言葉だゾ
2019/01/29(火) 19:42:57.71ID:LpX7EYli
日本語だと乱数、乱数字は中国語で同じ意味
2019/01/29(火) 20:05:34.32ID:KErsf3wp
つまり>>714 は中国の方ということね
2019/01/29(火) 20:10:45.02ID:aCb5tvGW
randbetween(1,30)は?
2019/01/29(火) 21:04:31.66ID:t1GGJDgX
WorksheetFunction.RandBetween
長いな
2019/01/29(火) 21:09:20.18ID:ZMlTx8zG
3D6+5とかをループ使わず一発で計算したいって質問なんじゃね?
723デフォルトの名無しさん
垢版 |
2019/01/29(火) 22:06:13.32ID:5yOKK0P6
int(rnd()*146)+5
724デフォルトの名無しさん
垢版 |
2019/01/29(火) 22:13:12.12ID:TIeo+FQH
>>723←これが世間でバグと言われるものです
725デフォルトの名無しさん
垢版 |
2019/01/29(火) 22:19:46.43ID:5yOKK0P6
>>724
どこがバグ?
726デフォルトの名無しさん
垢版 |
2019/01/29(火) 22:22:56.72ID:TIeo+FQH
>>725
それぐらい自分で考えろやプロさんw
脳ミソついとらんかプロさんの頭にはw
2019/01/29(火) 22:40:58.72ID:2ngnqyHd
>>726
お前が馬鹿
2019/01/29(火) 22:57:33.37ID:ywRkqTQf
>>725
もっと簡単な例で考えれば分かる
1〜6のサイコロ2個と、2〜12のサイコロ1個で合計7の出る確率は、前者は6/36=1/6、後者は1/11
結果(確率)がまったく違うから、同じプログラムとは言えない
729デフォルトの名無しさん
垢版 |
2019/01/29(火) 23:02:31.19ID:TIeo+FQH
ワイは>>727の恥ずかしさをもっと掘りさげたいんやw
2019/01/29(火) 23:06:27.72ID:kf38Yh2H
いつも思うんだが、どういう状況で使うんだよ。
Excelでゲームでも作るの?
731デフォルトの名無しさん
垢版 |
2019/01/29(火) 23:13:55.62ID:TIeo+FQH
話をそらさずにもっと>>727の恥ずかしさを語り明かそうやw
2019/01/30(水) 00:12:38.41ID:7kXOqwqB
数学の確率は人間の直感を裏切ることがけっこうあるから、慎重に扱わないと痛い目を見る
2019/01/30(水) 00:15:46.22ID:mmfL+KpI
乱数が欲しいんて書いてないし
2019/01/30(水) 00:18:07.14ID:yYgJ37mP
確率が直感に合わないのはほとんどの場合解釈を間違えてるだけ
2019/01/30(水) 00:21:14.29ID:Q4JlCs68
バグと確率の問題をすり替えて逃げてる馬鹿がいる。どこにバグがあるか指摘してみろや。
VBAしかしらない馬鹿どもが。
2019/01/30(水) 00:26:30.71ID:4G8qGWeY
「乱数字」という言葉の意味がわからない限り、誰も何も回答できないわけだが
回答者が勝手に問題を作って議論を始めるいつものパターンになってるな
2019/01/30(水) 00:34:51.85ID:3ZvsJrgT
結果が意図と違っていたらバグ
たとえば乱数でサイコロをシミュレーションするプログラムで、どれだけ試行しても確率が1/6に収束しようとしなかったらバグがある
2019/01/30(水) 00:36:43.73ID:ILSDuF01
よっぽど悔しかったんだな。。。
739デフォルトの名無しさん
垢版 |
2019/01/30(水) 07:02:27.20ID:3/CBrgdG
>>735←バグの意味を知らんプロさんwwww
ええでもっと恥ずかしがってもwww
740デフォルトの名無しさん
垢版 |
2019/01/30(水) 12:54:53.35ID:X+zaqEGo
よろしくお願いします。

あるxlsmファイルを、1ヶ月間だけ使える、という形にしたいです。
つまり、各使用者がそのファイルを自分のPCに置いてから、1ヶ月だけは操作できると
いうことなのですが、どのようにしたらよいかわかりません。

ファイルを開いたときに、そのファイルが設置後1ヶ月経っていたら「もう期限切れ」とメッセージを出して
操作を不可能にしてしまうのを考えていたのですが、その設置日というのをどう取得すればいいのか。

「USBメモリなどから、そのファイルがそのPCにコピーされた日」を取得するにはどうすればよいでしょうか?
2019/01/30(水) 13:21:11.92ID:TCBbgKI9
「ブックの作成日」でググって出てきた二つ目のサイト
ttps://www.moug.net/tech/exvba/0130015.html
2019/01/30(水) 18:49:20.66ID:vrvbffTa
2019/01/30(水) 19:54:50.43ID:E22FaIEN
Excel 2016 (64bit) のVBAで質問です

とある理由で、大規模桁の計算をしないといけなくなったので
取り急ぎLongLong型の配列を作って必要な演算を作ろうかと

そこで、エラーが出て悩んでいる案件と、ちょっとした疑問が

とりあえず、代入されるものが数値であるかのチェックは必要よね…と思い
IsNumeric関数を使おうかと思うのですが
これって、例えば100桁の整数を表す文字列でも通るんでしょうか…って通るみたいなんですが
上限は文字列として扱える上限まで行けるんでしょうか?

計算の都合で商を求める演算「\」を使ったところ、10^12 \ 2^22 あたりの計算でオーバーフローとなりました
(実際には、2^22のところはそのオーダーの定数)
「\」の計算は64bitに非対応なのでしょうか?
2019/01/30(水) 21:02:23.30ID:E37rjQ75
それこそPowerShell呼んでBigInteger使えよ
2019/01/30(水) 22:56:12.99ID:dsQEAAmt
>>740
基準日をどうするかにもよるけど、
一番簡単なのは、If 今日の日付 = 2019/2/28 Then Exit Sub 的なやつ。
2019/01/30(水) 22:59:06.78ID:dsQEAAmt
あ、コピーされた日か。
じゃあFileSystemObject使うとか。
2019/01/31(木) 07:12:05.16ID:Z5McOm4q
コピーされた日なんてどこにも記録されてないんだから取得のしようもないだろ
2019/01/31(木) 07:50:39.64ID:tKdk8GYp
起動時にあるセルが空白なら今の日付入れる。
空白でないのなら、セルの内容と今の日付を比べる。
セルは非表示のシートとかでよくね?
2019/01/31(木) 08:17:14.63ID:mZzaZtfh
>>744
別に作成されているマクロのコンポーネントになるので不採用ですね…。
2019/01/31(木) 10:24:09.90ID:ivIRiWY+
スルーされてるけど>>741に日付取得のソースが丸々載ってますよ
余程変なことをしなければ、コピー日時はファイルの(≠エクセルのプロパティ)の作成日時です
適当なセルをパスワード保護して、ブックモジュールのOpenイベントに空白条件で日付を入れるコードを書けば初回起動で記録されます。

>>743
\演算子が良く分からないのですが、除算の結果から小数点以下を消すという意味なら
Int(10 ^ 12 / 2 ^ 22)
でどうでしょうか
2019/01/31(木) 12:39:08.81ID:xxTKFGAk
>>749
WScript.Shell で呼べばいい
VBAのソース内に書いたPowerShell実行できるぞ
2019/01/31(木) 12:43:51.49ID:B2lY3/DV
>>751
何でそういう面倒くさい方法にしなきゃならんの?
VBAじゃどうにもならんという結論か?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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