X



Excel VBA 質問スレ Part78
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん (ワッチョイ 5f2e-juJ7)
垢版 |
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
0854デフォルトの名無しさん (ワッチョイ 0301-WyxW)
垢版 |
2023/01/22(日) 19:20:26.34ID:5nd4WcY/0
>>849
だから何をやりたいのかいまいちよくわからんけど100個コピー作りたいならループで回せばいいだけ
新規のDictionaryはループ中で確保する
timeline.Add Yukkuri
Dim N As Long
Dim Yukkuri1 As Dictionary
Dim Key As Variant
For N = 1 To 100
Set Yukkuri1 = New Dictionary
For Each Key In Yukkuri.Keys
Yukkuri1.Add Key, Yukkuri(Key)
Next
timeline.Add Yukkuri1
Next
0855デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/22(日) 19:55:07.24ID:pQuel4xur
>>853
2つにそれぞれ意味があるから良いだろ
ソフトは客先に納品書や請求書をプリントしたり、EXCELは社内の全ての管理をしやすいように情報付与、そしてその2つが在る事でどちらのかの入力ミスを防げる
この仕組みで会社が儲かってるんだからケチ付けられんわ俺も
0856デフォルトの名無しさん (ワッチョイ e379-TshA)
垢版 |
2023/01/22(日) 20:04:58.23ID:xRK/d49A0
>>814は恐らく連想配列が欲しいわけではなく、
javascriptやpowershellにあるような動的なプロパティが欲しいんだろう
VBAではそういう便利なものはないので基本ノードデータにジャグ配列を使って
ノードの先頭にプロパティ名に相当するタグを付けていった方が記述量的にも混乱が少ないと思われる
0857デフォルトの名無しさん (ワッチョイ e379-TshA)
垢版 |
2023/01/22(日) 20:21:20.32ID:xRK/d49A0
>>814の意図を汲んだデータをジャグ配列のノードで表記すると恐らく以下の様になる
dim timeline_root
timeline_root = array("timeline" _
,array("Yukkuri", array("Name", "霊夢"), array("serif", "霊夢です")) _
,array("Yukkuri", array("Name", "魔理沙"), array("serif", "魔理沙だぜ")) _
)
配列の要素0に必ずタグ名が入るようにすれば、HTMLのDOMツリーのように一環した探索ロジックが組める
0858デフォルトの名無しさん (ワッチョイ bf3d-Sc6R)
垢版 |
2023/01/22(日) 23:17:51.08ID:vQS42HbD0
>>857
やろうとしてることは、ゆっくりムービーメーカー4の定義ファイルをVBAで編集すること。
ゆっくりムービーメーカー4の定義ファイルはJSONになってて、
VBAではJSONが使えないから、誰かが組んだVBA-JSONを使うと
JSONがVBAのコレクションやディクショナリー(連想配列)で作られたデータになる。
そこなかで、セリフが定義されてるを連想配列を複製してセリフ書き換えてくてことをやってるんだけど、
VBAのSETて参照するだけで、その参照したものを上位の配列にaddしても、
参照先情報みたいなものがaddされるだけで、別メモリーの情報がaddされるわけじゃない。
ただ、試行錯誤していたら
一旦同じ連想配列をaddしたものを作って、
それをjsonにして、またそのjsonを連想配列に戻してやれば、
別メモリが割り当てられた連想配列が出来上がった。
そのあとは個別に要素を書き換えられる。
javascriptとかは
.配列.push({...Yukkuri[0]})
とかやれば行けたんだが、VBAは無理なのか。
0859デフォルトの名無しさん (ワッチョイ cfda-sGmE)
垢版 |
2023/01/23(月) 00:40:24.32ID:g2a0jdgy0
こんどはjavaかw
できるならそっちでやれよ
0860デフォルトの名無しさん (ワッチョイ e379-TshA)
垢版 |
2023/01/23(月) 02:01:54.23ID:8zQTqYpQ0
>>858
処理対象がjsonなら最初からそう書けばいいのに
いくつか手段はあるけどVBAでやろうとすると結局面倒だし特に理由が無いなら他を検討してみては
VBA-JSONの使い方の話なら俺は知らん
0861デフォルトの名無しさん (アウアウウー Saa7-DmZS)
垢版 |
2023/01/23(月) 05:38:36.83ID:yam+YnrUa
>Excelと販管ソフトに、個々に入力してるから安心
もし、この2つが異なった値なら、システムが破綻しているw

オリジナルは1つのみ!
そして、バックアップ用のコピーを持つべき!
0862861 (アウアウウー Saa7-DmZS)
垢版 |
2023/01/23(月) 05:45:42.29ID:yam+YnrUa
例えば、銀行のシステムでも、2つのオリジナルを持たない。
3人が同時入力して、多数決でオリジナルを決める

サーバーでもそう。偶数個のノードにしない。
1:1, 2:2 などの分断が起きて、どちらがオリジナルか判断できなくなる

必ず、奇数個で判断して、オリジナルを決める。
そして、オリジナルのバックアップ用のコピーを持つ

そうしないと、システムが破綻する
0863デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/23(月) 05:47:16.87ID:7g54Dlndr
>>861
知らんがな
システムの良い悪いの判定なんてお前らに求めて無い事を察しなさい

俺以外の社員含めて理不尽な事をやってるなと思いながら仕事をしてるんだから

70歳の引退予定の上司に言ってくれ

そいつがいなくなればスッキリさせる
0864デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/23(月) 05:53:04.08ID:7g54Dlndr
>>862
例えば3人で販管ソフトに入力したとして
その販管ソフトの仕様により、会社の必要とする情報を持てない場合はどうするんですか?
そもそも一人しか人的資源が無い場合はどうするんですか?
0867デフォルトの名無しさん (オッペケ Src7-a63L)
垢版 |
2023/01/23(月) 07:03:42.58ID:7g54Dlndr
>>865

変数を定義して範囲の右下のキーワードを拾って

ActiveSheet.PageSetup.PrintArea =

のところにその定義した変数を入れてやるという理屈で合ってますよね?

後はフサフサでも分かるEXCEL VBAの本が到着してから勉強します
0869デフォルトの名無しさん (ワッチョイ 0301-WyxW)
垢版 |
2023/01/23(月) 08:50:43.95ID:rT2ytU3d0
>>858
> VBAのSETて参照するだけで、その参照したものを上位の配列にaddしても、
> 参照先情報みたいなものがaddされるだけで、別メモリーの情報がaddされるわけじゃない。
だから新規に作ってコピーしなよって書いたのに...
コードまで書いたのに無視するんならもうさじ投げるわ
0870デフォルトの名無しさん (ワッチョイ bf3d-Sc6R)
垢版 |
2023/01/23(月) 09:10:22.34ID:+DM8uE5N0
>>869
新規に作るていっても、複雑な連想配列の塊をどうやって作る?
サンプルはたかだなNameとserifしかキーがないけど、
キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。
しかもその構造が動的だったらお手上げ。
0872デフォルトの名無しさん (アウアウウー Saa7-WyxW)
垢版 |
2023/01/23(月) 09:32:51.14ID:QZVEgBP9a
>>870
> キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。
> しかもその構造が動的だったらお手上げ。
お前にはお手上げなだけだろw
>>854 に "Name" とか "serif" なんて書いてない、キーを動的に取得してコピーしてることすら読み取れないレベルなら諦めたほうがいいと思うよ
0878デフォルトの名無しさん (ワッチョイ cfda-88l+)
垢版 |
2023/01/23(月) 18:35:46.07ID:2y89VdvQ0
先週までは問題なく動いていたブックを開くと、
すぐExcelが落ちて回復が入ってしまい、
回復ブックを開くと、プロシージャがモジュールごと丸々なくなっていた。

ワークシートのクエリーやテーブル、計算式やグラフは壊れていなさそうで、
新たにモジュールを作り直して
バックアップを取っていたプロシージャの記述をそのまま貼り付けたら、
一応、VBAも動くようになった。

過去には新たなモジュールすら作れなくなったことも。
0887デフォルトの名無しさん (JP 0Hff-88l+)
垢版 |
2023/01/23(月) 21:54:37.35ID:c8LJJic2H
>>886
10年ぐらい前、変数を日本語名にしてると一切動かなくなるってバグがあったな
確かACCESSだった
変数を日本語名にしても、あまりいい事はないと思う

>>878
あと、この方法はあまり良くない
一度壊れたブックは、内部的にゴミデータが残っている可能性がある
使いまわすと、そことバッティングする可能性がある
新規ファイルを作り、シートを一つずつコピー、vbaもテキスト単位でコピー、
といった感じで作り直した方が良い
めんどくさいけど、やっておいた方がいいよとは言っておく
0889デフォルトの名無しさん (ワッチョイ d3ce-Jpma)
垢版 |
2023/01/24(火) 03:50:07.79ID:ID+MP23U0
ドイツのプログラマーが、Selenium、WebDriverを使わずにEdgeを直接制御するクラスを作ってるのを見つけた
試したらとりあえず動いたんで報告
https://www.codeproject.com/Tips/5307593/Automate-Chrome-Edge-using-VBA

動作テスト中にはまった点を書いておくと、裏でEdgeのアップデートチェックが走ってるとエラーが出て止まる
これだけ殺せば動く
taskkill /f /im msedge.exe
taskkill /f /im MicrosoftEdgeUpdate.exe

あと、Edgeの起動オプションを
--remote-debugging-pipe --disable-automation
に変えるとコマンドラインウィンドウが出なくなる
0898デフォルトの名無しさん (オッペケ Src7-zVY0)
垢版 |
2023/01/26(木) 07:02:58.95ID:QQqpl7Qdr
質問です

VBAを使ってこのスレの人にアンケートを取りたい

皆さんは文系ですか?理系ですか?
もともとプログラミング出来る人ですか?
それとも経理とか必要に迫られて覚えた方ですか?
0905デフォルトの名無しさん (スプッッ Sd47-aTb4)
垢版 |
2023/01/26(木) 09:03:16.60ID:N0DN9EFmd
皆さんはお仕事何されてますか
事務をやって三年、仕事を楽にするために始めたExcelVBAは人並みに身についた気がしますが
ただの事務では給与が足りずプログラマに転向するには経験が浅いのです
0906デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
2023/01/26(木) 09:11:16.84ID:NYppQtUx0
エクセルのvbaエディタ?がすごくつかいずらくて、
vsCodeでvbaが記述できるxvbaというツールを利用しようと試みています。
ですが、
エクセルで書かれたvbaの日本語文字が、vsCodeで読み込むと文字化けしてしまいます。
おそらく、エクセルの方のエディタがUTF-8ではないのかと思いますが。
このあたり、経験されているかた。どのように対処されていますでしょうか?
どうぞアドバイスください。
0912デフォルトの名無しさん (ブーイモ MM7f-PvGG)
垢版 |
2023/01/26(木) 12:32:00.38ID:Y5eC8vQ8M
>>902
エラーにするってのがよくわからんが
個人的にはc=a+b以降をしたのようにする。

If vartype(a) = vbstring or vartype(b) = vbstring Then
Debug.print "エラー"
Else
c= a + b
Debug.print c
End If

End Sub

>>908
a=1 と直接書いてるけど本当は
a=どっかのセルの値にしたいんじゃね?
で、そのセルには数値以外が入ってる可能性があるから
文字列ならエラーにしたいんじゃないかと。

>>909
文字列に変換するstr関数を使いたかったんじゃね?
書き方間違えてるから謎の言語になってるけど。
0913デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
2023/01/26(木) 12:41:55.63ID:NYppQtUx0
Transposeで作る配列の
一番最初の要素の添字は0じゃなくて、1であってます?
0915デフォルトの名無しさん (JP 0Hff-88l+)
垢版 |
2023/01/26(木) 12:55:07.08ID:jr7Apji9H
>>908
単純にコードのミスを検出したいだけなんです
変数名を間違えた場合の保険程度のつもりなんです

>>909
すいません
別言語触ってて何もかも間違えました
変数宣言dim a as stringのつもりでした

Sub foo()

Dim a As String
Dim b As String
Dim c As String

a = 1
b = 2
c = a + b

End Sub
0916デフォルトの名無しさん (オッペケ Src7-CBlj)
垢版 |
2023/01/26(木) 13:02:48.18ID:bIyafktir
>>915
それなら素直にlongで宣言するべきでしょ
変数名間違えた時の保険って、紛らわし変数名にするなって話だし
変数名間違えたときのための保険って言い出したら何も出来ないじゃん
じゃあその「変数名間違ってたときの確認のためのコードの」変数名が間違ってたらどうするの?
その確認のための変数名確認のためのコードをつけるのか?
それが間違ってたら?
確認のための変数名確認のための変数名確認のためのコードをやるの?
って話になる
0917デフォルトの名無しさん (JP 0Hff-88l+)
垢版 |
2023/01/26(木) 13:11:07.62ID:jr7Apji9H
>>916
逆で、文字列を数値として使ってしまった場合に検出したい
単にタイポ時の保険としてエラーが起こってほしいってだけだよ
vbaに無いなら仕方ない、そういう言語なんだなってだけで
別にそこには期待しないよ
0918デフォルトの名無しさん (スップ Sd1f-88l+)
垢版 |
2023/01/26(木) 13:21:15.99ID:UvNszdC2d
少し上にいた大量にレスしてた奴みたいなおかしな質問者もいるし
適当に質問しても回答者が頑張ってくれるだろみたいな考えの質問者が多すぎなんだよ
0921デフォルトの名無しさん (オッペケ Src7-CBlj)
垢版 |
2023/01/26(木) 13:35:53.75ID:bIyafktir
>>917
あのさぁ、自分の説明が下手くそなくせにできないのは他人のせい、言語のせいにするのはよくないぞ
単にタイプミスって言っても自分がコード書くときにミスしないようにしたいのか、使う際にinputBox等で入力させるときにミスをなくしたいのかで全然違うだろ
エスパーじゃないんだから質問するならもっと具体的にしろよ
0924デフォルトの名無しさん (スップ Sd1f-88l+)
垢版 |
2023/01/26(木) 14:50:16.50ID:UvNszdC2d
ExcelVBAは型に対する考慮が緩いから正直期待にそえる回答はないと思うよ
例えば変数名の先頭に型を付与するようなルール決めてもタイプミスって言葉で許されるなら破綻するだけだしね
0925デフォルトの名無しさん (オッペケ Src7-CBlj)
垢版 |
2023/01/26(木) 14:52:16.71ID:bIyafktir
>>923
だから、最後までちゃんとかけや
それはinputBoxを格納する変数の話だろ
そんな話はしてないわ
色々な具体例があって様々な解決策があるのに、なんにも具体的な話を出さずに抽象的に話しして、一部に対してだけ反論してお前は馬鹿か?
0927デフォルトの名無しさん (オッペケ Src7-CBlj)
垢版 |
2023/01/26(木) 14:58:44.32ID:bIyafktir
つーか
「単純にコードのミスを検出したいだけなんです
変数名を間違えた場合の保険程度のつもりなんです」
本当にこれだけだったら先頭にOption Explicitつけて似たような変数宣言するな、で終わる話だよな
さすがにOption Explicitをつけてない人はいないだろうからそんな超初歩的な事はありえないと思ってるけど
0933デフォルトの名無しさん (スプッッ Sd47-aTb4)
垢版 |
2023/01/26(木) 16:54:33.47ID:N0DN9EFmd
IF Not Isnumeric( a + b ) then c = a + b
とか
c = a & b
とかの雑魚コードでも教えておけばよかったのに
0939デフォルトの名無しさん (ワンミングク MM9f-gSeq)
垢版 |
2023/01/26(木) 19:12:37.90ID:CIVBTG9eM
零細企業のアホみたいな奴に答えてやろうなんて思うから荒れる
助けてで始まる質問する奴や、頭が悪いのに自分はできるみたいに思っておかしな質問をする奴は無視するのが一番
0943デフォルトの名無しさん (スッププ Sd1f-88l+)
垢版 |
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
そういう話じゃないと思うぞ
0944デフォルトの名無しさん (ワッチョイ 6f19-1gWY)
垢版 |
2023/01/26(木) 20:10:49.10ID:omfXV+oL0
キチンとString型を宣言しているなら確か
+は文字列連結の意味になるんじゃなかったっけ?
であれば前のレスで言ってた人がいたけど
- 0とか*0とかすればエラーになるんじゃないかな?

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

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

でもここはVBAのスレなので、
基本的に型宣言は絶対だと思っていいと思うよ。
0948デフォルトの名無しさん (ワッチョイ 332f-DmZS)
垢版 |
2023/01/27(金) 02:03:03.20ID:sVJGpHK80
>>944
> - 0とか*0とかすればエラーになるんじゃないかな?
暗黙の型変換がある以上、数値として認識できる文字列が入ってたらエラーになるとは限らん
VBAは型宣言はあるけど、Variant型と暗黙の変換があるから、絶対とまでは言えないのだよ

>>947
イミディエイトウィンドウの内容なんて書き換えできるからな
釣りじゃないってんならちゃんと詳しい環境かいてみ
0951デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
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
レス数が950を超えています。1000を超えると書き込みができなくなります。

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