Excel VBA 質問スレ Part78

レス数が900を超えています。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/22(日) 08:52:06.84ID:LXKdZzsm0
BASIC知ってるはずなのに配列知らんのか
2023/01/22(日) 09:17:23.76ID:Hx9JKMaXr
>>810
ありがとう
行か列を任意を指定してキーワードを見つければ良いんですね


>>811
BASIC自体を知ってるのでは無く
その当時、マイコンを買って
雑誌の記事を見て自分用にカスタマイズしただけ
主にカセットテープから20分くらいLoadしてゼビウスとかやってた
2023/01/22(日) 09:18:35.16ID:Hx9JKMaXr
適当に打つとsyntax errorが出てくる事は知ってる
2023/01/22(日) 13:00:42.70ID:vQS42HbD0
連想配列のコレクションを使いたいんだが、個別の要素が書き換えられない。
書き換えると全要素が書き関わってしまう???
これはどうしたらいい?
Set Yukkuri = New Dictionary '「Microsoft Scripting Runtime」を参照設定
Dim timeline As New Collection
Yukkuri.Add "Name", "霊夢"
Yukkuri.Add "serif", "霊夢です"
timeline.Add Yukkuri
'セリフを追加する
timeline.Add Yukkuri
Debug.Print "--before--"
Debug.Print timeline.Item(1)("Name"), timeline.Item(1)("serif")
Debug.Print timeline.Item(2)("Name"), timeline.Item(2)("serif")
'追加したセリフの変更
timeline.Item(2)("Name") = "魔理沙"
timeline.Item(2)("serif") = "魔理沙だぜ"
Debug.Print "--after--"
Debug.Print timeline.Item(1)("Name"), timeline.Item(1)("serif")
Debug.Print timeline.Item(2)("Name"), timeline.Item(2)("serif")

実行すると
--before--
霊夢 霊夢です
霊夢 霊夢です
--after--
魔理沙 魔理沙だぜ ←こっちも書き換わってる
魔理沙 魔理沙だぜ
2023/01/22(日) 13:08:27.56ID:CdSwQQ4cd
>>806
自分が何もできないから100%他人任せにしてるような割りに態度が少し横柄なんじゃねと思わなくもないんだよね
少なくとも>>806の月別の表が何か月分も同じシートにあるのであれば
・シートを2つコピーして>>807用の2つのシートを作る
・それぞれのシートで1行目から最終行まで検索する
・月別の始点はA列?の「月売上高表」の文字列が含まれる行
 終点は次の月の「月売上高表」の文字列が含まれる行の-1
 ※ただし最終月は翌月の文字列が見つからないので最終行でよい
これをもとにそれぞれのシートの行を非表示にしたり、列を非表示にして
印刷範囲決めたらいいだけなんじゃないの
ここまでの説明はマクロで可能
俺はやる気のあるコードを見せてくれたりする人には付き合う気はあるけど
100%他人任せには構ってられないから以降は他の人が回答してくれることを祈るわ
2023/01/22(日) 13:23:01.10ID:0592ee0wr
>>815
私ってサバサバしてるから
2023/01/22(日) 13:29:43.69ID:5nd4WcY/0
>>814
そりゃ連想配列の実体は1つしか作ってないから書き換えたら変わるわな
いまいちどういう結果を期待してるのかよくわからんけど片方が変わって欲しくないなら
timeline.Add Yukkuri
Dim Yukkuri1 As New Dictionary
Dim Key As Variant
For Each Key In Yukkuri.Keys
Yukkuri1.Add Key, Yukkuri(Key)
Next
timeline.Add Yukkuri1
のように中身をコピーして作る
818デフォルトの名無しさん (スッップ Sd1f-RQPf)
垢版 |
2023/01/22(日) 14:10:36.46ID:3khvOI6Qd
また零細企業の馬鹿が粘着してるのか
しつこい馬鹿は迷惑
2023/01/22(日) 15:30:30.53ID:DNm1kf3fH
>>749
Sub main()
Dim arr() As Variant
arr = dataArr

End Sub

Function dataArr() As Variant()
Dim cel() As Long
cel(0) = Cells(Rows.Count, 1).End(xlUp).Row
cel(1) = Cells(1, Columns.Count).End(xlToLeft).Column

Dim rw, col As Long
Dim datas() As Variant
ReDim datas(cel(0), cel(1))

For rw = 0 To cel(0) - 2
For cl = 0 To cel(1) - 1
datas(rw, cl) = Cells(rw + 2, cl + 1)
Next cl
Next rw
dataArr = datas
End Function
2023/01/22(日) 15:30:46.23ID:DNm1kf3fH
これでmain関数の中のarrにすべてのデータが取り込めた
arr(0,1)はヨソバ〇カメラ
arr(1,5)は80000

2行目に、み〇なのさくら屋、売上金額、納品予定
3行目のE列に納品予定合計額を表示させたければ
cells(2,1)=arr(1,1)
cells(2,2)=arr(1,2)
cells(2,3)=arr(1,4)
と指定して表示し
合計はVBA内でfor分で合計値を算出するか
シートに転記後にworksheetFunction.sum()で合計を算出して表示すればどうでしょう

製品テーブル(略称含む)や顧客テーブル(略称含む)をシートで作って置ければ
さらに楽にできると思います
2023/01/22(日) 16:01:00.37ID:PpuiymMq0
>>820
それはデータ取り込みのためのVBAですね?

印刷のための範囲指定は

Sub tes()
'
' tes Macro
'

'
Range("A1:I69").Select ←ここの部分を書き換えると
ActiveSheet.PageSetup.PrintArea = "$A$1:$I$69"
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = "$A$1:$I$69"
Application.PrintCommunication = False
With ActiveSheet.PageSetup


    途中省略

End With
Application.PrintCommunication = True
End Sub
2023/01/22(日) 16:06:26.01ID:DNm1kf3fH
>>821
どの程度の大きさのデータを印刷したいのかわからないですが
サンプル程度のデータ量でしたら配列を使って取り込みと出力をして
印刷設定はエクセル側で行えば十分かと思いましたけど
それではあまり役立ちませんか?
2023/01/22(日) 16:17:39.68ID:SHbanA0Dd
>>822
印刷設定をEXCEL側とは?
毎回手動で設定して印刷という話ですか?
データ取り込みは苦労していないというか既に自動化は諦めてるので

未納品状態から納品済に変わった段階で
下から消して上に書き込む作業を行わないとならんので。。
2023/01/22(日) 16:24:05.21ID:DNm1kf3fH
>>823
よく理解してなくてすみません
rangeの範囲指定だけ指定できたらOKなのでしょうか?

例えば、
Range("A1:I69")
printArea="$A$1:&i%69"
を指定したいってことでしょうか?
2023/01/22(日) 16:27:55.16ID:xRK/d49A0
>>819
1オリジンのRangeオブジェクトと0オリジンの配列のやり取りはどうやっても混乱するから
セルを配列に取り込む場合は「array = Range(範囲).Value」のようにRange.Valueで取り込んだ方がいいよ
これでRangeで指定した範囲の値が1オリジンの2次元配列として取得できる
逆に配列をセルに書き戻す場合も、Rangeとarrayの要素数が同じなら「Range(範囲).Value = array」で済む
これはVBAでシートを配列で扱う場合の常識だと思うので一応
2023/01/22(日) 16:35:26.12ID:DLw6jtzT0
おいおいおいおいw まーたハナシが変わって来てるw ま、それがこの人の個性っちゃあ個性だけどw
パワークエリやパワーピボットを駆使してマクロで一発で取り込むのは出来てる とか、大法螺だったんだな

彼の目的はただ一つ  会議資料として用紙の横書き印刷と縦書き印刷をしてる、その縦書き印刷を自動化したい その一点
横書きとか縦書きとかは彼の独特な表現だからA4ヨコ印刷・A4タテ印刷に脳内変換してくれ A版かB版か、4か3かは定かでは無いが、まあそんな風

で、彼のとっ散らかった説明・解説をまとめると以下の通りだ
販売管理ソフトで売り上げを管理 → 売上データをExcelに吐き出し(もしくはExcelから引っ張る) → そのデータをパワークエリやパワーピボットを
駆使して集計し、会議用資料のテンプレートに落とし込む https://i.imgur.com/MNy37BM.jpghttps://i.imgur.com/JUP2t7B.jpg これはヨコ印刷で
問題無し https://i.imgur.com/LhkqS7p.jpg これのタテ印刷に苦心してる
何故なら :
  1] 二列不要だから削除したいが、削除すると「関数」が無くなって違算(エラー)←??
  2] 毎月行数の増減があるので最終行が決まらない ←必要なら「※」なり「最終行」なりを手入力してでもマクロを走らせるのの役に立てたい←???
  3] 画像には無いが、この他に担当者別売上の表がある ←最初の画像の赤丸位置?それとも上下の表の中間?
  4] これが1Sheetに1年12ヶ月分タテに並んでいるので各月自在に印刷するのは大変
ざっくりとこんな感じ
2023/01/22(日) 16:36:20.85ID:zZKA7THFr
>>824
印刷したい印刷範囲の右下が毎回変わるので

例えばそこに
「END」という透明文字を書き入れておく場合にはどのような記述となりますか?

これさえ出来れば自分のやりたい事が出来そうです
2023/01/22(日) 16:43:18.47ID:zZKA7THFr
>>826
同じ取引に対してデータ元が2つ有り

パワークエリとパワーピボットで自動取込をするのは販売管理ソフトのデータからが1つ目
こちらは自動的に取り込まれていて
簡単に得意先別、担当者別、商品別の合計や詳細は把握出来る


EXCELで報告資料を作る元データは、他の人が社内共有用に作っているEXCELファイルから

この2つのデータが合っている事を確認する必要もある


最初の質問から有りとあらゆる事を書き出すなんて無理だよ

後から話が違うと言われようが
説明するために簡便化した資料でやってるんだし
てゆーかあなたはVBAの技術は無いんだから無理に話に加わらなくても良いよ
2023/01/22(日) 16:47:09.62ID:DLw6jtzT0
で、それはVBAで出来るならそれでもいいけど、普通の機能でも十分賄える作業
範囲に名前を付けて(例えば01y とか01t とか)印刷時にページ設定のダイアログにその名前を入れて印刷するだけ
(もしくは、名前ボックスで選択して[印刷範囲に設定]でもいい ソッチのが楽かも)
範囲が重複しても名前付けは出来るんだし、せっかくの機能を使わない手は無い
11月に成ったら11yや11tを入れてやるだけで広範囲のうちそこだけをプレビューしてくれる
範囲が増減するってなら Offset使った範囲にしとけば行が増えても対応してくれる その名前付けを上手にできるかどうかがカギ
2023/01/22(日) 16:50:46.58ID:zZKA7THFr
販売管理ソフトに全ての詳細情報を付加する機能が無いから、会社に必要な付随情報をEXCELで付与して管理させている

だから一つの取引に対して2つデータが存在してる
2023/01/22(日) 16:53:25.56ID:DNm1kf3fH
>>827
Sub main()
Dim rng As Range
Set rng = Range(Cells(1, 1), Cells(2, 2)) '①

ActiveSheet.PageSetup.PrintArea = rng.Address
End Sub

みたいな感じで、①を都度指定したらできませんか?
2023/01/22(日) 16:53:33.27ID:zZKA7THFr
>>829
そんな事するよりも

>>827
これを一発VBAに入れた方が楽じゃね?
2023/01/22(日) 16:55:27.93ID:zZKA7THFr
EXCELのデータが正しい事もあれば
販売管理ソフトのデータが正しい事もあるので
二重にすることで間違いのチェックにはなっていると思う
2023/01/22(日) 17:00:57.08ID:uavb1b440
一元管理されてない時点で最悪のデータ
2023/01/22(日) 17:04:14.11ID:zZKA7THFr
一元管理は入力ミスがあるとそのまま行ってしまう恐ろしさがある
2023/01/22(日) 17:04:15.06ID:DNm1kf3fH
>>827
最終行列を取得して範囲指定するのなら
cells(rowscount,1).end(xlup).row
cells(1,columns.count).end(xltoleft).column
で最終行列を所得できます

キーワードを使った場合、
cells.find('end')でオブジェクトを取得しますけど
他のセルにキーワードが紛れていたら終わりますので非推奨かもですね

キーワードを最終セルにするというのなら
findを使って最終セルを取得して範囲指定に利用できそうですね
2023/01/22(日) 17:06:06.74ID:zZKA7THFr
>>831

単純に印刷したい範囲の右下に
ENDとか※とか右下とかの文字を入れ込んでおいてそれをVBAにするのは難しいものなのですか?
2023/01/22(日) 17:06:29.53ID:DLw6jtzT0
そもそもが、全体のデータをどう扱うかのイメージが出来ていない
都度継ぎ接ぎだらけの思い付き・間違ったインスピレーションで作業しているだけ システムの九龍城砦を築いてるようなもの
毎月最終行に「最終行」って手入力することが自動化の助けに成ると思うならそうしてみりゃいい
その手間の時間で印刷終わってる 何月がいちばん上の月か知らんが、年度途中の月、7月とか8月でもそれで動作するシステム組めるのか?
ボタンを12ヶ並べるつもり? 年度途中の月を印刷するためにひとつのボタンで解決させるには、もっと苦労を重ねるけど?
プログラムを書くためにExcel使ってるんじゃ無い 楽するために使ってんだ  
2023/01/22(日) 17:06:34.14ID:zZKA7THFr
>>836
すんません
入れ違いで書いてしまいました
2023/01/22(日) 17:08:34.65ID:zZKA7THFr
>>838
仕方が無いじゃん
自分で作ったシステムじゃないんだし
前任者が全て手動で半日掛かった仕事を5分で出来るようになっただけでもマシになったとは思う
2023/01/22(日) 17:10:50.88ID:DNm1kf3fH
>>839
いえいえ、こちらこそ要領が悪くてすみません
findでキーワードを検索して、該当セルを取得したら
そのセルが何行目何列目なのかを取得できますので
それを>>821の範囲に利用してみたらいけるかもですね
2023/01/22(日) 17:11:53.93ID:PpuiymMq0
>>838
月に一回だけ
ENDと入れるだけで
一ヶ月にかなりの時間を節約出切るのが分からない??

行や列を挿入するだけだから
ENDと入れるのは一回だけ

なんなら前月のシートを使えば、それすら要らなくなる

ほんとお前は性格悪いね
2023/01/22(日) 17:13:22.05ID:PpuiymMq0
>>841
キーワードを
ピロリちゃんとか
絶対に使わないであろう言葉を使えば良いかもですね
2023/01/22(日) 17:26:29.02ID:zZKA7THFr
縦向きえんど
横向きえんど

この文字を透明色で埋めておけば良いかな
上書き出来ないようにセルを保護しておく?

そうすりゃ毎月何も設定しなくても良くなりますね
845デフォルトの名無しさん (ワッチョイ 7f74-Njuq)
垢版 |
2023/01/22(日) 18:32:47.51ID:Km84h4+z0
>>844
そんなことより「ハゲでも分かるExcel VBA入門」という本を読めばいい。
分かりやすくてすぐ上達。
2023/01/22(日) 18:34:23.97ID:5nd4WcY/0
>>835
入力チェックはまた別の話
帳票毎にデータが違う方が怖いわ
2023/01/22(日) 18:35:54.62ID:zZKA7THFr
>>845
ワタシサバサバしてるので
2023/01/22(日) 18:36:29.31ID:zZKA7THFr
>>846
別の話じゃないよ
2023/01/22(日) 18:51:11.61ID:vQS42HbD0
>>817
レスサンクスです。
ということはYukkuriが100人いたら、
Dim Yukkuri?? As New Dictionaryを100行要るてことになるてこと?
timeline.Add Yukkuriのところで、timelineが使ってるメモリが追加でアロケートされ、
そこに連想配列が追加されるていう動きにならんのかね?
それか連想配列の実体をコピーできるとか。
2023/01/22(日) 18:52:29.42ID:zZKA7THFr
ワタシフサフサしてるので
2023/01/22(日) 18:56:56.52ID:pQuel4xur
>>846
ところで会社で嫌われてない?
その方が心配だわ
2023/01/22(日) 19:04:19.40ID:uL/qufmv0
日曜日に仕事?家に持ち帰りならブラック企業だな
2023/01/22(日) 19:13:06.03ID:5nd4WcY/0
>>848
別の話だろ
Excelと販管ソフトに個々に入力してるから安心とか言うならそれは単に二重入力してミスを見つけてるだけの話

>>851
まあこんなことを言い出すやつなんだろうけどw
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
2023/01/22(日) 19:55:07.24ID:pQuel4xur
>>853
2つにそれぞれ意味があるから良いだろ
ソフトは客先に納品書や請求書をプリントしたり、EXCELは社内の全ての管理をしやすいように情報付与、そしてその2つが在る事でどちらのかの入力ミスを防げる
この仕組みで会社が儲かってるんだからケチ付けられんわ俺も
2023/01/22(日) 20:04:58.23ID:xRK/d49A0
>>814は恐らく連想配列が欲しいわけではなく、
javascriptやpowershellにあるような動的なプロパティが欲しいんだろう
VBAではそういう便利なものはないので基本ノードデータにジャグ配列を使って
ノードの先頭にプロパティ名に相当するタグを付けていった方が記述量的にも混乱が少ないと思われる
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ツリーのように一環した探索ロジックが組める
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は無理なのか。
859デフォルトの名無しさん (ワッチョイ cfda-sGmE)
垢版 |
2023/01/23(月) 00:40:24.32ID:g2a0jdgy0
こんどはjavaかw
できるならそっちでやれよ
2023/01/23(月) 02:01:54.23ID:8zQTqYpQ0
>>858
処理対象がjsonなら最初からそう書けばいいのに
いくつか手段はあるけどVBAでやろうとすると結局面倒だし特に理由が無いなら他を検討してみては
VBA-JSONの使い方の話なら俺は知らん
2023/01/23(月) 05:38:36.83ID:yam+YnrUa
>Excelと販管ソフトに、個々に入力してるから安心
もし、この2つが異なった値なら、システムが破綻しているw

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

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

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

そうしないと、システムが破綻する
2023/01/23(月) 05:47:16.87ID:7g54Dlndr
>>861
知らんがな
システムの良い悪いの判定なんてお前らに求めて無い事を察しなさい

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

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

そいつがいなくなればスッキリさせる
2023/01/23(月) 05:53:04.08ID:7g54Dlndr
>>862
例えば3人で販管ソフトに入力したとして
その販管ソフトの仕様により、会社の必要とする情報を持てない場合はどうするんですか?
そもそも一人しか人的資源が無い場合はどうするんですか?
2023/01/23(月) 06:43:46.30ID:iLyXDG2rH
>>872さんはキーワードで所望の範囲指定はできたのでしょうか?
2023/01/23(月) 06:47:14.18ID:7g54Dlndr
>>872
答えな
2023/01/23(月) 07:03:42.58ID:7g54Dlndr
>>865

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

ActiveSheet.PageSetup.PrintArea =

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

後はフサフサでも分かるEXCEL VBAの本が到着してから勉強します
2023/01/23(月) 07:11:24.85ID:iLyXDG2rH
よかったです、がんばってください!
2023/01/23(月) 08:50:43.95ID:rT2ytU3d0
>>858
> VBAのSETて参照するだけで、その参照したものを上位の配列にaddしても、
> 参照先情報みたいなものがaddされるだけで、別メモリーの情報がaddされるわけじゃない。
だから新規に作ってコピーしなよって書いたのに...
コードまで書いたのに無視するんならもうさじ投げるわ
2023/01/23(月) 09:10:22.34ID:+DM8uE5N0
>>869
新規に作るていっても、複雑な連想配列の塊をどうやって作る?
サンプルはたかだなNameとserifしかキーがないけど、
キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。
しかもその構造が動的だったらお手上げ。
2023/01/23(月) 09:18:38.98ID:0EjNvA6Wd
質問スレに回答してくる人は善意でやってるだけで最終的に自分で解決できないならあきらめろって話
2023/01/23(月) 09:32:51.14ID:QZVEgBP9a
>>870
> キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。
> しかもその構造が動的だったらお手上げ。
お前にはお手上げなだけだろw
>>854 に "Name" とか "serif" なんて書いてない、キーを動的に取得してコピーしてることすら読み取れないレベルなら諦めたほうがいいと思うよ
2023/01/23(月) 09:42:01.99ID:q/YAUd9Kd
マクロでやりたいなら行数が最大になるパターンで書式作っておいて、そこにデータ入力、不要な行の削除でそのまま印刷すればよくね?
2023/01/23(月) 09:55:52.06ID:+DM8uE5N0
>>872
すまんできたわ。
ありがとう。
Set Yukkuri1 = New Dictionary
を書く位置を間違えてた
2023/01/23(月) 13:24:02.41ID:2y89VdvQ0
またVBAが壊れた。
プロシージャの中でオブジェクト変数に割り当てる
ワークシート名やクエリー・テーブル名を
日本語にしているのはマズい?
2023/01/23(月) 15:15:51.75ID:cuqAJLzI0
インターネットが壊れた
2023/01/23(月) 17:40:15.92ID:zqGzpVPE0
vbaが壊れるという表現が分からない
プログラムは組んだようにしか動かない
2023/01/23(月) 18:35:46.07ID:2y89VdvQ0
先週までは問題なく動いていたブックを開くと、
すぐExcelが落ちて回復が入ってしまい、
回復ブックを開くと、プロシージャがモジュールごと丸々なくなっていた。

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

過去には新たなモジュールすら作れなくなったことも。
2023/01/23(月) 19:12:29.48ID:g2a0jdgy0
自力で解決した自慢ですね、わかります
2023/01/23(月) 19:45:05.26ID:GmkrhCzJ0
過去に学んでこの際だからぜんぶ変えてしまおう またいつアプデ地獄に巻き込まれるか知れたもんじゃ無いし
https://qiita.com/Q11Q/items/7a9d4c89726cfaa7abd6
2023/01/23(月) 20:16:53.47ID:iLyXDG2rH
「VBAが消えてしまった!マクロが壊れて動かない!」
ってな感じで検索してみたら?
2023/01/23(月) 20:31:12.87ID:XEd9VR/30
ACCESSで、NLSの問題でカナ含むVBAモジュールが開けなくなるってのはあったな
2023/01/23(月) 21:06:30.67ID:2y89VdvQ0
>>881
ああ、そういえばIMAGE関数が家庭向けサブスクにも配布されたからと、
日曜日にExcelをバージョン2301に更新したんだった・・・
2023/01/23(月) 21:23:58.29ID:7qHnsy280
確認したけど2212が最新で更新できなかった
2023/01/23(月) 21:28:06.31ID:c8LJJic2H
NAME?
2023/01/23(月) 21:37:36.60ID:2y89VdvQ0
これが原因かどうかはまだ分からないけど。
https://i.imgur.com/49fEgC7.png

Office Insiderには参加していない。
2023/01/23(月) 21:54:37.35ID:c8LJJic2H
>>886
10年ぐらい前、変数を日本語名にしてると一切動かなくなるってバグがあったな
確かACCESSだった
変数を日本語名にしても、あまりいい事はないと思う

>>878
あと、この方法はあまり良くない
一度壊れたブックは、内部的にゴミデータが残っている可能性がある
使いまわすと、そことバッティングする可能性がある
新規ファイルを作り、シートを一つずつコピー、vbaもテキスト単位でコピー、
といった感じで作り直した方が良い
めんどくさいけど、やっておいた方がいいよとは言っておく
2023/01/23(月) 21:59:43.45ID:2y89VdvQ0
>>887
> といった感じで作り直した方が良い

やっぱり・・・orz
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
に変えるとコマンドラインウィンドウが出なくなる
2023/01/24(火) 14:18:41.94ID:kQQ7KETY0
Dim a As Long
Dim b As Short
2023/01/24(火) 14:22:05.82ID:kQQ7KETY0
Dim a As Single
Dim b As Double
Dim c As Triple
2023/01/24(火) 20:20:19.23ID:Fm53fhAfr
フサVBAの本が届いた~
分からないとこはよろしく
2023/01/25(水) 00:33:41.40ID:E3f+ZKf20
>>889
どうしてわざわざEdgeをチョイスするのかと
2023/01/25(水) 01:52:23.37ID:WwTOH1I60
Edgeと言いながらプロトコル的にchronium系共通だし
OSに元から入ってるEdgeならIE難民にはちょうどいいんじゃね
2023/01/25(水) 11:18:39.60ID:PxGM72CY0
他社との業務連携用途とかだと他の選択肢が無かったりする
2023/01/25(水) 11:41:19.68ID:qyEQLwkW0
自分にできないことを引き受けるから失敗する
2023/01/25(水) 14:14:51.65ID:uj/UrXzd0
できるだろうって思ってガンガン仕様変更されても
2023/01/26(木) 07:02:58.95ID:QQqpl7Qdr
質問です

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

皆さんは文系ですか?理系ですか?
もともとプログラミング出来る人ですか?
それとも経理とか必要に迫られて覚えた方ですか?
2023/01/26(木) 07:44:32.02ID:im4j/4Ys0
>>898
マ板でやれ
2023/01/26(木) 08:08:19.42ID:QQqpl7Qdr
マ板って何?
包丁切れますか?
2023/01/26(木) 08:12:22.27ID:jr7Apji9H
無意味なアンケート
2023/01/26(木) 08:14:59.84ID:jr7Apji9H
文字列の演算をエラーにする方法は無いでしょうか

Sub foo()

Str a
Str b
Str c

a = 1
b = 2
c = a + b
Debug.Print c

End Sub
2023/01/26(木) 08:40:12.57ID:InTdWzkF0
c = a - b
2023/01/26(木) 08:47:05.40ID:jr7Apji9H
>>903
お、マイナスだとエラーになるんですね!
・・・ならんやないかーい
905デフォルトの名無しさん (スプッッ Sd47-aTb4)
垢版 |
2023/01/26(木) 09:03:16.60ID:N0DN9EFmd
皆さんはお仕事何されてますか
事務をやって三年、仕事を楽にするために始めたExcelVBAは人並みに身についた気がしますが
ただの事務では給与が足りずプログラマに転向するには経験が浅いのです
906デフォルトの名無しさん (ワッチョイ ff02-qYbV)
垢版 |
2023/01/26(木) 09:11:16.84ID:NYppQtUx0
エクセルのvbaエディタ?がすごくつかいずらくて、
vsCodeでvbaが記述できるxvbaというツールを利用しようと試みています。
ですが、
エクセルで書かれたvbaの日本語文字が、vsCodeで読み込むと文字化けしてしまいます。
おそらく、エクセルの方のエディタがUTF-8ではないのかと思いますが。
このあたり、経験されているかた。どのように対処されていますでしょうか?
どうぞアドバイスください。
2023/01/26(木) 09:44:15.86ID:eGur5fW5M
>>906
よく分からんけど逆にVSCでCP932使えば良いのでは?
2023/01/26(木) 10:08:42.84ID:UvNszdC2d
>>902
質問の意味が分からんけどそもそもabcをStringにしてるのはなぜ?
c = a + bに3と戻したいならc = Val(a) + Val(b)とでもすれば
2023/01/26(木) 10:40:51.75ID:im4j/4Ys0
> Str a
> Str b
> Str c
なんていう謎の言語はスレ違いかと
2023/01/26(木) 11:00:07.24ID:UvNszdC2d
>>905
スレ違いです
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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