Excel VBA 質問スレ Part78

レス数が1000を超えています。これ以上書き込みはできません。
2022/10/30(日) 13:43:16.31ID:6yf2E1Gz0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

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

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
Excel VBA 質問スレ Part77
https://mevius.5ch.net/test/read.cgi/tech/1658009255/

-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/01/26(木) 14:56:29.20ID:jr7Apji9H
>>924
ですよね
ありがとうございました

>>925
質問を理解できないアホw
2023/01/26(木) 14:58:44.32ID:bIyafktir
つーか
「単純にコードのミスを検出したいだけなんです
変数名を間違えた場合の保険程度のつもりなんです」
本当にこれだけだったら先頭にOption Explicitつけて似たような変数宣言するな、で終わる話だよな
さすがにOption Explicitをつけてない人はいないだろうからそんな超初歩的な事はありえないと思ってるけど
2023/01/26(木) 15:12:07.01ID:bIyafktir
>>926
え、>>924で解決したのか?
ってことはマジでOption Explicitをつけてなかっただけ?
そこまで超ド初心者だとは思わんかったわ
2023/01/26(木) 15:26:02.63ID:PKxWUOv2d
例の零細企業の馬鹿社員だろ
2023/01/26(木) 15:51:08.82ID:jr7Apji9H
>>928
結局回答できない無能で草
2023/01/26(木) 15:55:50.96ID:41WP6aJtd
やっぱり
こういうのを相手にするのがそもそもの間違い
2023/01/26(木) 16:26:35.24ID:QQqpl7Qdr
>>929
ん?呼んだ?
933デフォルトの名無しさん (スプッッ Sd47-aTb4)
垢版 |
2023/01/26(木) 16:54:33.47ID:N0DN9EFmd
IF Not Isnumeric( a + b ) then c = a + b
とか
c = a & b
とかの雑魚コードでも教えておけばよかったのに
2023/01/26(木) 17:03:23.50ID:UDgAljjqM
a = 1 の暗黙の型変換でエラーにしたいならそう言えよ
2023/01/26(木) 18:24:03.88ID:JQ22Y2sI0
>>928
なれると初心者の質問だって見抜けるようになるよ
2023/01/26(木) 18:44:31.80ID:jr7Apji9H
荒れすぎだろ
どうなってんだよ
2023/01/26(木) 19:02:58.68ID:UvNszdC2d
質問が雑だと回答する側は色々考えるからこういう感じになるんだよ
だから質問する側もちゃんと回答しやすいようにすればいいだけ
2023/01/26(木) 19:07:48.41ID:lq03KzKz0
そんなの期待するだけ無駄
そっとスレを閉じればいいのよ
2023/01/26(木) 19:12:37.90ID:CIVBTG9eM
零細企業のアホみたいな奴に答えてやろうなんて思うから荒れる
助けてで始まる質問する奴や、頭が悪いのに自分はできるみたいに思っておかしな質問をする奴は無視するのが一番
2023/01/26(木) 19:15:21.07ID:LFv4Wa39r
てゆーかそんな事を言うやつがわざわざこんなとこ見るなよ
教えてやってるみたいな立ち位置でさw
2023/01/26(木) 19:17:05.41ID:fSHWBRl+H
変数が文字列ならエラーにすれば?
2023/01/26(木) 19:26:25.23ID:im4j/4Ys0
そもそも
> Str a
> Str b
> Str c
の時点で実際に動かしてないんだから相手する価値なし
2023/01/26(木) 20:00:51.10ID:BIrRkdsHd
相手にしたくないならほっておけばいいんだから無駄なレス書いて荒らすなよ

>>926
サンプル書けばわかると思うけど例えば下のようなコードは最後の数値型に数値以外の代入のみエラーとなるからコーディングミスしないように注意するしかないという話
Dim a As String
Dim b As Long
a = "a" '文字の"a"
a = 1 '文字の"1"
b = "1" '数字の1
b = "a" '変換エラー

>>928
そういう話じゃないと思うぞ
944デフォルトの名無しさん (ワッチョイ 6f19-1gWY)
垢版 |
2023/01/26(木) 20:10:49.10ID:omfXV+oL0
キチンとString型を宣言しているなら確か
+は文字列連結の意味になるんじゃなかったっけ?
であれば前のレスで言ってた人がいたけど
- 0とか*0とかすればエラーになるんじゃないかな?

逆にSQLとかで文字列を数値で扱いたい場合は
*0とか-0とかにすると暗黙の変換で数値にしてくれる。

VBAでは型宣言は絶対だけど、
VBSみたいにスカラー変数を使う場合は
VBAみたいな型指定の型宣言が出来ないんで少し戸惑うかもね。

でもここはVBAのスレなので、
基本的に型宣言は絶対だと思っていいと思うよ。
2023/01/27(金) 00:45:46.26ID:PwZKt+DmH
>>944
>+は文字列連結の意味になるんじゃなかったっけ?
ならないよ
2023/01/27(金) 00:52:57.14ID:Gy/KHy720
>>945
https://i.imgur.com/v220L7Z.png
2023/01/27(金) 01:00:12.13ID:PwZKt+DmH
>>946
!?
https://i.imgur.com/NYHsRgw.png

どうなってんだ?
2023/01/27(金) 02:03:03.20ID:sVJGpHK80
>>944
> - 0とか*0とかすればエラーになるんじゃないかな?
暗黙の型変換がある以上、数値として認識できる文字列が入ってたらエラーになるとは限らん
VBAは型宣言はあるけど、Variant型と暗黙の変換があるから、絶対とまでは言えないのだよ

>>947
イミディエイトウィンドウの内容なんて書き換えできるからな
釣りじゃないってんならちゃんと詳しい環境かいてみ
2023/01/27(金) 03:26:55.09ID:wPosq0f50
>>944
>+は文字列連結の意味になるんじゃなかったっけ?
JavascriptやRubyの話だね
2023/01/27(金) 04:22:04.52ID:WUhobyCY0
演算子一覧表
https://support.microsoft.com/ja-jp/office/e1bc04d5-8b76-429f-a252-e9223117d6bd

連結演算子
& 2 つの文字列を組み合わせて、1 つの文字列を作成します。
+ 2 つの文字列を組み合わせて、1 つの文字列を作成し、Null 値を伝達します (一方の値が Null の場合、式全体が Null と評価されます)。
2023/01/27(金) 09:27:20.18ID:JeWwXD830
VBAはあまり書かなくて理解足らないのは承知しているが、

配列に0から200の値を書き込むサンプル

これは、型があわないとアラートが返ってきます。
ダメな理由を教えてください。

Sub test()
Dim arrs As Variant
Dim i As Long
For i = 0 To 200
arrs(i) = i
Next i
End Sub
2023/01/27(金) 09:46:51.11ID:HtuDNqBEd
全ての行に「Debug.Print TypeName(arrs)」を入れてみると何でダメかわかってくるかもね
2023/01/27(金) 09:50:45.30ID:Gy/KHy720
>>951
Variant型は便利だけどVBAでは取り扱いが初心者には難しい方だと思う
昨日も変数の型のことで荒れてたけど、できるだけ適切な型を指定した方がバグになりにくい

そのまま動くようにするなら
Sub test()
  Dim arrs() As Variant
  ReDim arrs(200)
  Dim i As Long
  For i = 0 To 200
    arrs(i) = i
  Next i
End Sub

俺が推奨したい書き方は
Const arr_max = 200
Sub test()
  Dim arrs(arr_max) As Long
  Dim i As Long
  For i = 0 To arr_max
    arrs(i) = i
  Next i
End Sub
2023/01/27(金) 09:50:46.53ID:+MAp+PmZM
VBAじゃなくてもダメだろ
2023/01/27(金) 10:21:25.20ID:JeWwXD830
ありがとうございます。

>>954
JSなら。こんな感じ。
var arrs = [];
for (var i=0; i<200; i++) {
arrs[i] = i;
}
2023/01/27(金) 10:22:55.83ID:JeWwXD830
>>952,>>953
ありがとうございました。VBAの配列は癖が強いねえ。
2023/01/27(金) 10:49:30.02ID:PwZKt+DmH
古い言語だからね
仕方ないね
2023/01/27(金) 12:06:47.69ID:HtuDNqBEd
>>955のコードはarrsは配列として宣言するような代入してるけど
>>951は配列の宣言がどこにもないからね
癖というよりも単なる勘違いでしょ
959デフォルトの名無しさん (アウアウウー Saa7-sGmE)
垢版 |
2023/01/27(金) 15:35:27.15ID:nAK+7/AUa
0から200だと201回繰り返すのも注意
2023/01/27(金) 16:29:58.00ID:JeWwXD830
>>953
200個の要素数が確定されている場合ですかね。
将来配列の要素数が変わることがわかる場合、
どうなりますか。

うーん。
VBAで配列操作するより、セル関数でデータを加工していった方が早いし、
分かりやすい気がしてきた。
2023/01/27(金) 17:27:12.70ID:HtuDNqBEd
>>960
VB(VBA)の場合は配列の再定義するためのRedimというのが用意されている
Dim a(0 to 200) as long
Redim Preserve a(0 to 1000)
とすることで0から200までの値を保証して0から1000までの配列に拡張ができる
まあ正解なんて1つじゃないんだから自分にしっくりくる作り方でいいと思うけどね

あと細かいようだけど>>955の「for (var i=0; i<200; i++) {」は
VBの質問に合わせるなら「i<=200」が正しいんじゃない?
962デフォルトの名無しさん (スプッッ Sd1f-aTb4)
垢版 |
2023/01/27(金) 17:38:42.59ID:EY8clDJJd
>>960
DimRedimは先に回答した人がいるから

>VBAで配列操作するより、セル関数でデータを加工していった方が早いし、
>分かりやすい気がしてきた。

用途にもよるが分かりやすさとしては間違いなくそう
VBA分からないやつでもどんな操作をしているか分かるのはでかいし
特異なケースのテストもわりと少ない手間で試せる

データの成形入れ替え並び替えは全部関数でやって
そうすると関数の参照先シートを変更する度に重くなるから
マクロでは関数が入ったブックの呼び出しと
操作するデータを参照先シートにコピペする作業を任せる

こんなやり方もあり
一応配列格納のほうがいちいちセルの読み取りしない分速いことは速いが
VBAで書き出す手間とエラーチェックの手間と
仕事ならそれを誰かに引き継ぐことを考えると…って感じ
963デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
2023/01/27(金) 17:55:20.59ID:JeWwXD830
ありがとうございます。
そうですね。「i<=200」が正しいです。

要素数をいちいち定義したり再定義しないといけないのは
ちょっと不便ですね。自分でも他の方法ないか調べてみます。



データとして直接見えるというのが、セル関数の良さですね。
VBAの配列だと中のデータ見るのに手間かかる。


参考になりました。みなさんありがとうございました。
2023/01/27(金) 19:38:09.77ID:FOQwFQw10
別に要素数が不確定ならそれなりの組み方があるけどな
2023/01/27(金) 20:25:55.36ID:uIWhZEdtM
相手にしたら負け
2023/01/27(金) 21:37:57.80ID:DxN0bpvv0
勝ち負けの基準がわからない
2023/01/28(土) 02:38:02.20ID:I1dsnIs2M
わかった気で勘違いしている馬鹿の間違いや馬鹿さ加減を指摘したら泥沼になるだけだから相手にしたらいかんということだよ
零細企業のアレとか
2023/01/28(土) 03:06:54.86ID:cCrz+GwL0
つまり、>>965を相手にしてはならんということすね。
ありがとう。
969デフォルトの名無しさん (ワッチョイ 3619-GWjr)
垢版 |
2023/01/28(土) 06:32:52.50ID:hxz/by/q0
>>963
まぁScripting.DictionaryかCollectionでも使えば?
二次元配列的な使い方をしたいならついでにクラスのお勉強もしておけばいい。
他にもRecordsetを使うという手もある。
2023/01/28(土) 07:04:12.75ID:dWzZ2QT5r
>>967
結構、俺のこと好き?
匿名掲示板において個人を認識してもらえるのは書込み冥利に尽きるよ

愛情の反対は無関心だからな
2023/01/28(土) 07:56:23.07ID:mBQ16TA8r
愛される零細おじさんでつ

自分の業務をEXCELでメニュー作ってボタン一つで飛ぶようにしてるんですが
例えばEXCELにみずほ銀行のアイコンを貼り付けて押せばみずほ銀行のEB画面に飛んだり
売掛金回収ならボタン押せば売掛金管理のファイルを読み込んだり
流石に他のソフトを起ち上げたりはVBAでも無理ですよね?
おっPythonとかなら出来るんですか?
2023/01/28(土) 08:00:10.68ID:mBQ16TA8r
RPAツールを使えば良いのか。。
973デフォルトの名無しさん (ワッチョイ 3619-GWjr)
垢版 |
2023/01/28(土) 08:01:55.27ID:hxz/by/q0
まーた
RUBY信者の成りすましか・・・
2023/01/28(土) 08:04:56.16ID:mBQ16TA8r
ん?
RUBYを調べれば良い?
2023/01/28(土) 08:20:41.12ID:KGu/MZwKr
shell
2023/01/28(土) 10:13:10.69ID:yr1CASjB0
>>971
EB画面は知らんがスクレイピングじゃだめなのか?
売掛金のファイルがcsvならパワークエリで取り込めばいいと思う
2023/01/28(土) 10:23:25.23ID:/lutP43W0
ハイパーリンクを調べても、それじゃ無い って結論に至って質問してンのか?
2023/01/28(土) 10:37:54.23ID:mBQ16TA8r
あ、書き方が悪かったか

愛される零細おじさんでつ

自分の業務をEXCELでメニュー作ってボタン一つで飛ぶようにしてるんですが
例えばEXCELにみずほ銀行のアイコンを貼り付けて押せばみずほ銀行のEB画面に飛んだり
売掛金回収ならボタン押せば売掛金管理のファイルを読み込んだり

以上はハイパーリンクやマクロ記録を使って実現出来てる
売掛金管理ファイルを呼び出した後は、更新ボタンを押すことでパワークエリを使った集計も実現出来てる(更新ボタンを押さたくても更新させる事は出来るがあえて更新前の数値を確認するためにそのようにしてる)

流石に他のソフトを起ち上げたりはVBAでも無理ですよね?
おっPythonとかなら出来るんですか?
2023/01/28(土) 10:41:20.97ID:mBQ16TA8r
要するに販売管理のパッケージソフトや会計のパッケージソフトを起動させて全自動を追求したくなったという質問です

例えばEPSONの会計ソフトなら定番の資料は自動的に出力出来るのは知ってるが、今使ってるのは毎回、手作業でボタン押さないと出力出来ないんだよね
2023/01/28(土) 10:57:57.78ID:/lutP43W0
ファイルの意味判ってンのか? 基本のキが欠落してるような
そして、そんな奴が改悪し続けてるExcel Book 数年後に後任に引き継がれて「なんだよ、これ」に成り果てる
そもそも、上司に了解得ているのか?社内のコンプラどうなってんだ おれがコンプラか 社内規定の意味でのコンプラだが
2023/01/28(土) 11:00:07.10ID:mBQ16TA8r
>>980
お前は毎回理解力が無いな

既に先人が中途半端な仕組みを作ってるからそこに出力を合わせる事を考えてる
このやり方は後任には引き継がない

前任者の手作業を教えるq
2023/01/28(土) 11:01:11.80ID:mBQ16TA8r
>>977
この時点で読み違いしてるやん
会社でお荷物だろw
2023/01/28(土) 11:45:05.56ID:/lutP43W0
いけね、ついうっかり980踏んでた
無理だから安価指定しないけど、誰かお願いします
2023/01/28(土) 11:46:26.88ID:mBQ16TA8r
>>983
分かった
2023/01/28(土) 11:47:07.68ID:mBQ16TA8r
はい建てた
Excel VBA 質問スレ Part79
https://mevius.5ch.net/test/read.cgi/tech/1674874007/
2023/01/28(土) 11:58:33.98ID:NqcfPhRT0
>>982
お前は他のソフトを立ち上げることとそのソフトのボタンを押すことの区別もついてない時点で>>977以上のお荷物だろ
就職してるかどうかは知らんがw
2023/01/28(土) 12:00:37.97ID:XR4zA44Nr
>>986
は?
ボタンはEXCEL上で作った奴の話だぞ?
ソフトのアイコンクリックじゃないぞ?
2023/01/28(土) 12:01:58.62ID:XR4zA44Nr
あ、ハイパーリンクでソフトの起動まで出来るのか
それは失礼しますた
2023/01/28(土) 12:03:14.15ID:NqcfPhRT0
>>987
EPSONの会計ソフトの話だろ
> 例えばEPSONの会計ソフトなら定番の資料は自動的に出力出来るのは知ってるが、今使ってるのは毎回、手作業でボタン押さないと出力出来ないんだよね
そもそもExcelのボタンの話ならそのボタンに紐づいてるルーチン呼び出せばいいだけだし
2023/01/28(土) 12:03:52.20ID:XR4zA44Nr
となると、そのソフトでダイレクトに帳票印刷のEXEファイルがあるならそれをリンクさせれば良いのか

分かったありがと
2023/01/28(土) 12:05:06.01ID:XR4zA44Nr
>>989
いやEPSONは前職で使ってた奴
でも今のもその実行ファイルを直接起ち上げれば行けるね
2023/01/28(土) 12:06:35.27ID:NqcfPhRT0
>>988
ハイパーリンクでなくても>>975が書いてるShell関数で任意のソフトを起動できる
起動だけならな
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/shell-function
人をお荷物呼ばわりするレベルにないぞ
2023/01/28(土) 12:06:36.37ID:XR4zA44Nr
こりゃEXCELだけでかなりの事は出来るな
2023/01/28(土) 12:07:46.42ID:NqcfPhRT0
>>991
お前の前職なんて知らんがな
とにかくそう言うことをやりたかったんだろ
としか受け取れないわ
2023/01/28(土) 12:09:07.22ID:XR4zA44Nr
でも一般のアプリケーションてその実行ファイルがどれか公開してる?
あ、アプリの動作を監視してるファイルを見れば良いのか?
2023/01/28(土) 12:09:25.98ID:NqcfPhRT0
To: 各位

無能の働き者がワッチョイ無しで次スレ立てちまったんだがどうする?
ワッチョイありで立て直す?
2023/01/28(土) 12:10:22.95ID:XR4zA44Nr
>>996
俺のAIが自動的に削除してたわw
2023/01/28(土) 12:10:26.33ID:NqcfPhRT0
>>995
> でも一般のアプリケーションてその実行ファイルがどれか公開してる?
そんなことも調べられないならすっぱり諦めるなり人に頼むなりしなよ
2023/01/28(土) 12:12:38.73ID:UjlIZ1Ov0
Excel VBA 質問スレ Part79(ワッチョイあり)
http://mevius.5ch.net/test/read.cgi/tech/1674875532/
2023/01/28(土) 12:13:39.19ID:XR4zA44Nr
>>998
タスクマネージャーの監視で良いのか?
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 89日 22時間 30分 23秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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