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/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じゃどうにもならんという結論か?
2019/01/31(木) 12:52:33.19ID:xxTKFGAk
>>752
VBAでやろうとすれば自前で多倍長整数演算を実装する必要があり、開発とテストで誇張抜きで工数数百倍かかるよ
754デフォルトの名無しさん
垢版 |
2019/01/31(木) 16:39:19.38ID:aH0rCOCG
>LONGLONG

>100桁の整数

あほですか
2019/01/31(木) 19:07:59.37ID:B2lY3/DV
>>753
だからさ、まずお前の結論としてVBAじゃ無理というのがあって、それからだろPowerShell云々は。

で、本当のところ、無理かどうかは分からんが、仮に無理だとしてどうしてPowerShellになるんだ?
別に他でも良いわけだろ。
2019/01/31(木) 19:08:45.03ID:2eoSLZbf
>IsNumeric関数を使おうかと思うのですが

On Error Resume Next
数字じゃないとエラーが起きるような処理
エラーが起きたら終了みたいな
On Error Goto 0
2019/01/31(木) 19:28:01.37ID:ivIRiWY+
>>743
>>IsNumeric関数を使おうかと思うのですが、上限は文字列として扱える上限まで行けるんでしょうか?

ちょっと質問内容が良く分からないのですが、

・そもそもLongLong型(64bit=8バイト)の話では無かったのですか?100桁とは?
・ヘルプに有る通り文字列型の上限は2GBですが(以下同様)

仮に2GBの判定が出来たとしても、その膨大な時間を使うよりは例外処理してしまった方が早いと思います。
2019/01/31(木) 19:28:54.99ID:kne0z8/A
>>743
よくそんな仕事請け負ったな、依頼者に騙されてないか?
2019/01/31(木) 19:31:09.20ID:ivIRiWY+
お話を聞いてる限り、恐らく元々の依頼内容も勘違いされている部分があると思うので、
差し支えない範囲で教えて貰えれば根本的な部分に回答が出来るかもしれません。
2019/01/31(木) 19:31:49.59ID:ivIRiWY+
みんな同じ様な事言っててワロタ
2019/01/31(木) 21:50:14.70ID:xxTKFGAk
>>755
別にPowerShellでなくてもいいけど、標準のWindowsだけで特に追加で何か入れることなく使えて
多倍長演算もサポートしててVBAから簡単に呼べるのなんて他にある?
762デフォルトの名無しさん
垢版 |
2019/02/01(金) 01:19:40.80ID:UQQ7ub0a
>>757
そちらの質問は興味本位です。与えられた数値に見える文字列を信じるなら不要です
それと、LongLong型で済むなら配列はいりませんし

やりたいことは、例えば「100桁同士の四則演算をする」というようなことです。
コンパイラのインストールをセキュリティポリシーで禁止されているので
困っているのですよ。

>>759
そちらは時間があれば勉強してみようかと
ただ、それで実装すると引き継ぐときに後の人が大変そうですが
2019/02/01(金) 02:51:10.44ID:Jdk/7rOF
100桁ぐらいなら、Ruby でも演算できる
2019/02/01(金) 03:10:10.30ID:HKJPuzL8
>>762
あまりに馬鹿過ぎて話しにならん
どうして馬鹿と言われるか理解できるか?
2019/02/01(金) 04:03:45.69ID:bJm3iiDn
>>750
初回起動で設定しても元のブックをコピーし直せば何度でも使える
何の条件で期間指定したいのかわからないけど
パソコン限定ならレジストリでも使うのかな
2019/02/01(金) 07:03:41.22ID:gp0X8o+d
>>743
言語の動作もわかっていないこんな奴に依頼するなんて。頼む方も頼む方。
2019/02/01(金) 07:18:07.26ID:76fUr+Yk
Excel VBAの質問スレだろ
質問も回答もする気無いならスルー出来んのか?
768デフォルトの名無しさん
垢版 |
2019/02/01(金) 07:44:04.79ID:eMw5OSNU
答えられない質問はとりあえず馬鹿にして勢いで乗り切る方針のプロさんw
バカwww
2019/02/01(金) 08:37:10.62ID:UEAxmDKm
ComboBoxで↓を押して表示されるリストの行数は固定でしょうか?
表示行数を増やす方法がありましたら、ご教授ください

よろしくお願いします
2019/02/01(金) 08:51:37.94ID:76fUr+Yk
>>765
Excelのレジストリ操作だと簡単なのはそのパソコンのユーザー毎の設定だな
無論APIを使えば何でもできるけどね
所詮はバーチャルマシンも考えればユーザー側も何でもできる
その程度と思って使うか ネットにDB持つかだな
2019/02/01(金) 08:51:40.44ID:8kRZ6Lw/
最近はexcel2010とVB.netで改元対応しています。
excelのイベント少ないなって思っているのですが、2016などの新しいのはイベントや関数などは増えているのでしょうか?
2019なんかはタブレット操作用のイベントもあったりするとかでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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