Excel VBA 質問スレ Part65

■ このスレッドは過去ログ倉庫に格納されています
2020/03/17(火) 16:27:20.88ID:hh8LiIgR0

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

※前スレ
Excel VBA 質問スレ Part64
https://mevius.5ch.net/test/read.cgi/tech/1575297834/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
680デフォルトの名無しさん (ワッチョイ 6ee6-eHaU)
垢版 |
2020/04/27(月) 19:15:08.58ID:XYadQOO00
昔は「値で貼り付け」とかキー割り当てしてたけど最近のは割と便利になったから使ってないな
他には初回印刷日の挿入とか
ファイルプロパティにタイトルの設定とかかな
681デフォルトの名無しさん (ブーイモ MMfd-enkp)
垢版 |
2020/04/27(月) 20:04:15.02ID:GiQWIPCuM
「値で貼り付け」に関して最近のはどう便利になってるの?
2020/04/27(月) 20:24:28.01ID:Jy0k1GG60
VBAでの開発依頼がしょっちゅう来る…
2020/04/27(月) 20:30:04.12ID:XYadQOO00
>>681
https://i.imgur.com/xIc2Szq.jpg
684デフォルトの名無しさん (バットンキン MM0a-N7dq)
垢版 |
2020/04/27(月) 20:34:34.60ID:z3LiCQZGM
配列を使った方が良い場合ってどんな時?
2020/04/27(月) 20:48:23.14ID:XYadQOO00
>>684
相手は誰だ?
ワークシート? Dictionary? CSV文字列?
2020/04/27(月) 23:24:48.65ID:JH5ykH9R0
>>680
自分の素朴な疑問に答えてもらってありがとうございます。
2020/04/27(月) 23:26:56.58ID:g7wz6Zov0
ここの人ら凄い、
いつも感心しながら読んでるけど本当に勉強になる。
これだけ知識や経験あるならユーチューバ―とかになって上手くやれば副業も出来そう
2020/04/27(月) 23:27:29.10ID:fDdETITO0
>>684
処理したい変数がたくさんあって繰り返し同じことをする時
処理したいセルがたくさんあって繰り返し同じことをする時
2020/04/27(月) 23:28:15.08ID:fDdETITO0
office田中もいつのまにかyoutuberになってたけど、こんなおじいちゃんだとは思わなかった
690デフォルトの名無しさん (ワッチョイ 64ad-Btmo)
垢版 |
2020/04/27(月) 23:42:25.59ID:RTbdScdC0
VBAを本を読んだりググったりして勉強中です。
他社システムからいただくCSVファイルをExcelに取り込んで編集する必要があります。
頭にゼロが付いて、長さが不定の数字のフィールドがあるので、そこは文字列で
扱わなくてはならず、そのままExcelで開けません。
querytables.add でインポートしてみたところ、セル内改行の含まれる列があるため、
1行であるべきデータが2行になってしまいます。
POWERQueryを使えば回避できる、という情報にに突き当たり、とりあえずマクロの
記録をしてみて、使えるように変えられないか、と思いましたが行き詰っています。
「ソース = Csv.Document(File.Contents(””CSVのパス””),… 」
のCSVのパスの部分を変数にしたいのですが、変数にすると
「 .Refresh BackgroundQuery:=False」のところで
[Expression error] インポート 変数 がエクスポートと一致しません。モジュールの参照が漏れていませんか?」
と親しげだけど、冷たく突き放されます。
知識が足りなさすぎるのですが、データをきれいにして早く次の処理を作らなくては
いけなくて焦っています。
先輩たちはテレワークで、あまり質問もできず困っております。
どうぞよろしくお願いいたします。
2020/04/27(月) 23:45:46.00ID:3fBcsBz5r
>>689
再生数少ないけど分かりやすいから初心者は見るべきだと思う
schooのは微妙だけど
2020/04/28(火) 01:18:35.72ID:7QVY/xgO0
>>690
Ruby なら、以下をscript.rb に書いて、
CSV データを、input.csv に書いてある時、

ruby script.rb input.csv
と、シェルで実行すると、

require 'csv'

file_path = ARGV[ 0 ] # 引数には、CSVファイルパスを渡す。input.csv

# CSV ファイルを、1行ずつ処理する
CSV.foreach( file_path ) do |row|
puts "#{ row[ 0 ] } : #{ row[ 1 ] }"
end

入力・input.csv
あ,いう
a,bc

出力
あ : いう
a : bc
2020/04/28(火) 02:18:31.92ID:wtscQEd50
Sub ループuntil()
 Dim g As Long
  g = 3
 Do Until Cells(g, 2) = ""
 Cells(g, 6) = Cells(g, 2) + Cells(g, 3) * 10
 g = g + 1
 
 Loop Dim ms As String
 ms = MsgBox(g & "回ループ", vbYesNo, "どうやら")

 If ms = vbYes Then
 MsgBox "更に練習", vbYesonly, "じゃあ"   Else
 MsgBox "論外", vbYesonly, "てめーは"   
 End If
End Sub

何とか練習しつつ
ここにきてデータ型が逆に混乱してきましたわ
バリアントでごまかそうかな
おやすみなさい
2020/04/28(火) 02:51:59.71ID:ro9Vnp/Q0
>>690
こんな馬鹿に仕事をさせるのが間違い
2020/04/28(火) 03:02:31.63ID:OG4s1hHd0
>>693
これ、そこらの入門書にはなかなか書いてないんだけど、MsgBoxの結果はVbMsgBoxResultという特殊な型なので、変数msはこう宣言するのが正解

Dim ms As VbMsgBoxResult

この宣言を書いてからコードを書くと、

If ms =

ここまで入力すると自動的に、vbYesとかvbNoなどの選択肢が出てくる
2020/04/28(火) 04:56:00.09ID:Ok+k67Xa0
Select Case "CSVファイルをExcelに取り込む"
Case "直接開く"
MsgBox "0 padding"
Case "querytables"
MsgBox "inline CR"
Case "POWERQuery"
MsgBox "Syntax Error"
Case "先輩たち"
MsgBox "テレワーク"
Case "2ch"
MsgBox "ググレカス"
Case "自分"
MsgBox "勉強中"
End Select
2020/04/28(火) 05:30:30.28ID:CHpsAleC0
>>689
VBAは年齢層高いだろ?
Pythonとかより
2020/04/28(火) 06:23:10.14ID:fDIatR4a0
最近csvを開くのがはやってるみたいだけど、拡張子をtxtに変えて開き直すといいよ
2020/04/28(火) 08:10:33.21ID:uR1kyCkX0
>>670
ぜ・ん・ぶ
2020/04/28(火) 08:27:27.46ID:F6rfqhbJd
>>684
速度アップの為にあえて使うのはVariant配列。

配列にすることに全く違和感が無いので、"あえて"使うことが少ない。
配列にするのに自然なことがたくさんあるし、普通に使ってる。
2020/04/28(火) 13:36:09.05ID:1XDByXps0
ありがとうございました。
できました。
2020/04/28(火) 13:57:24.45ID:0tfnjkqK0
いえいえ
2020/04/28(火) 17:53:56.69ID:YPs9lugpM
Sub テキスト抽出()
  ChDir "c:\tmp"
  f = Dir("*.txt")
  c = 1
  Do While f <> ""
    Open f For Input As #1
        Line Input As #1,s
    s = "s"
    r = 1
    Do While Not EOF(1) And s <> ""
      Line Input #1, s
If s <> "" Then Cells(r, c) = Split(s, vbTab)(5)
    r = r + 1
    Loop
    Close #1
    f = Dir
    c = c + 1
  Loop
End Sub
2020/04/28(火) 18:04:37.39ID:YPs9lugpM
ここで教えて頂いた>>703の「指定Path内の全txtデータのF列2行目から下に数値が続く限りシートに全部抽出する」コードのお陰で憑き物が取れて運用してるのですが
たまに画像の様な他の列に行がはみ出したデータがあると

実行時エラー'9':
インデックスが有効範囲にありません
で止まりますが

これを「他の列がどうだろうがtxt内のF2から下に数値が続く限り抽出」
に改良するのは難易度高いですか?
というかコードで可能でしょうか
入門編の本には載って無く数字変えたりwhileの位置変えたりしてますが簡単にいくはずもなく
参考になるサイトなどありましたら教えて頂けませんでしょうか

↓こんなデータが混じってるとエラーで止まります
https://i.imgur.com/194ePDL.jpg
2020/04/28(火) 18:19:12.75ID:uYkVg/g/a
>>703
まんなかへんのdo while の後ろはかっこをつけたほうがいいよ
判定の対応がわかりにくいので
2020/04/28(火) 18:35:05.50ID:yXtY+D7s0
>>689
元々有名な人なんだね。
投稿動画多くてあれこれクリックしてるうちにどんどん登録者数が伸びてったからビックリした。
最初見た時は5000ぐらいだったのに、さてどこまで伸びるかな。
2020/04/28(火) 19:06:29.99ID:fDIatR4a0
>>704
>If s <> "" Then Cells(r, c) = Split(s, vbTab)(5)
この行、最後に(5)ってついてるでしょ
読み込んだデータに5+1番目(0スタートだから+1)の要素が無かったら、どうなると思う?

ここは、splitの結果を一旦配列変数に受けて、配列の大きさを確認する判定をいれるといいよ
実を言えば、s<>"" の判定も不要だったりもする
2020/04/28(火) 19:48:07.59ID:uR1kyCkX0
都道府県別の7日移動平均線を出すグラフ組めないかなあと
思って、「都道府県別の日々新規感染者数」を探したけど見つからん…。

なんで役人は pdf にしたがるんだろう。
2020/04/28(火) 20:13:54.22ID:ZPYYxv13M
>>707
正直ほとんどさっぱりわからないです。
が、ありがとうございます。そこらへんをいじればなんとかしろなりそうってことですかね。
まだ変数の使い方もよくわかってないのでsplit関数で検索して集中的に勉強していじれるようにがんばります。
2020/04/28(火) 21:00:00.12ID:CHpsAleC0
>>706
VBAはハードル低くて
エクセルが実用的だから
ユーザが多いんだろう
2020/04/28(火) 22:51:18.67ID:7QVY/xgO0
データは、PDF じゃなくて、アプリで処理しやすいように、
同じ場所に、CSV ファイルも置いておくのが基本!

役人は、データ処理の素人w
2020/04/28(火) 23:02:38.82ID:IT0hJXXxM
EOF関数?
なんじゃこりゃ
713デフォルトの名無しさん (ワッチョイ ae63-0s/K)
垢版 |
2020/04/28(火) 23:21:24.84ID:7mVXavmj0
>>708
各都道府県毎にオープンデータでCSV配布してるのに何言ってんだ?
2020/04/29(水) 01:03:36.89ID:j7HdUAEO0
VBAから参照設定をせずにoutlookを操作しようとしていますが、
「Set mailItemObj = oApp.CreateItem(oApp.olMailItem)」のところで、
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と
エラーが出てしまいます。どうすれば解決できますでしょうか。。。

Sub sendmail_sample1()
Dim oApp 'As NEW Outlook.Application OutlookのApplication
Dim myNameSpace 'As Outlook.NameSpace
Dim myFolder
Set oApp = CreateObject("Outlook.Application") 'VBAで参照設定をした場合は不要
Set myNameSpace = oApp.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(9)
'---コード1|outlookを起動する
Dim toaddress As String '変数設定:To宛先
Dim subject As String '変数設定:件名
Dim mailItemObj 'Outlookで使用するオブジェクト生成
'---コード2|差出人、本文、署名を取得する---
toaddress = Range("B2").Value 'To宛先
subject = Range("B5").Value '件名
'---コード3|メールを作成して、差出人、本文、署名を入れ込む---
Set mailItemObj = oApp.CreateItem(oApp.olMailItem) '★★★ここでエラー
mailItemObj.BodyFormat = 3 'リッチテキストに変更
mailItemObj.To = toaddress 'to宛先をセット
mailItemObj.subject = subject '件名をセット
'---コード7|outlookを閉じる(オブジェクトの解放)---
Set oApp = Nothing
Set mailItemObj = Nothing
End Sub
2020/04/29(水) 01:10:43.62ID:ICnUrfUx0
>>714
こうかな?
Set mailItemObj = oApp.CreateItem(olMailItem)
2020/04/29(水) 01:34:35.47ID:L1oMckOiM
配列変数難しすぎて笑える
2020/04/29(水) 01:35:24.04ID:j7HdUAEO0
>>715
レスありがとうございます。
「変数が定義されていません」エラーが出てしまいます・・・
718デフォルトの名無しさん (ワッチョイ e709-LlFz)
垢版 |
2020/04/29(水) 01:40:00.70ID:j7HdUAEO0
>>714です。自己解決いたしました。
olMailItemを値指定でゼロ(0)にしたらできました。。。
謎ですが。。。ありがとうございました。。。
2020/04/29(水) 09:03:38.75ID:osglNTbf0
定数ってoutlook.olMailItemみたいに書くんじゃなかったっけCreateObjectで別定義する必要があったはず
Excel上だとリファレンス入れないと>>715は機能しない
2020/04/29(水) 09:13:47.90ID:EmE7DP7rx
ただのパラメータ定数参照だから普通に数字を入れればいいだけ
olMailItemは0だったかな
721690 (ワッチョイ a7ad-LlFz)
垢版 |
2020/04/29(水) 09:22:41.65ID:sSCyRYOw0
>>690です。
みなさんありがとうございました。
もっと勉強します。
>>696
ちょっと楽しい気持ちになりました。恩に着ます。
2020/04/29(水) 18:51:15.87ID:IoQm9XvmM
msgboxの使い方
inputboxの使い方
Do loop
For next
if then else
初歩だけどここらを色々繰り返し勉強してると楽しい
msgboxは使い方もっと応用していきたい
楽しみながら勉強するといいですね
他にもっとお勧めの処理ありますかね。

あとさらに低レベルな疑問なんですが
vbYesNo
vbOkCancel

これってみんな細かに使い分けます?
タイトルとメッセージで誘導してあげて
elseで何もしないにするとほぼ通じちゃいますよね
これも使い分け必須だったりするのでしょうか
2020/04/29(水) 20:00:57.74ID:ZY0E7GgZa
やってみればわかると思うが
2020/04/29(水) 22:30:45.80ID:sZxShGZL0
メッセージBOXが出ている状態でESCキーを押された時の挙動が違う。
725デフォルトの名無しさん (ワッチョイ a78e-DBwA)
垢版 |
2020/04/29(水) 23:54:48.02ID:GcIsSLnW0
>>722
そろそろ馬鹿は死ね
2020/04/30(木) 00:04:19.84ID:UCocORui0
vbaって必要に迫られてやることが圧倒的な気がする
だからおすすめの処理とか言われてもな
2020/04/30(木) 02:12:11.10ID:e+nUl/nvH
同意
VBAは使わなくていいなら使わない方が望ましいわけで、
おすすめと言われると「まずはVBAを使わなくてよい方法を考えること」としか言いようがない
2020/04/30(木) 03:10:10.69ID:mLi4d9n50
道具なんて使う人次第
手作業とワークシート(数式)とVBAと別アプリと、何でやれば一番楽で間違いが起きにくいか比較検討して使い分けるのが理想
2020/04/30(木) 03:36:49.13ID:gai1ourp0
>>722
きびしめの意見が続いてかわいそうになったので
めげずにがんがれ
2020/04/30(木) 03:50:06.96ID:HupizHgZ0
数式だとすぐぶっ壊されてその修正に手間がかかるのでVBA使うのが好き
仕方なく数式に頼ったとしても、数式を一括修正できるボタンとかVBAで作っちゃってる
数式入ってるセルに保護かければいいじゃんって思うだろ・・・・
そうするとな、なんでここには入力できないんだよ!ってクレームがな、
いや、そこはここのシートのこの値が転記されるようになってて・・・とかいう説明を聞き入れる輩じゃないんだ
2020/04/30(木) 04:08:29.30ID:mLi4d9n50
人に渡すブックなら、VBAは消してシートはバックアップを取っておく
何やったっていじるやつはいじるし文句を言うから、結果だけを渡すようにしとかないと
2020/04/30(木) 04:41:41.42ID:HvDy85U60
>>722
>お勧めの処理
VBAが初心者でも簡単に扱えるのは
エクセルというGUIがついてるから

だけど普通のCUIプログラミングも
できると技術的に幅が広がるだろう

たとえばPythonとかRubyとかでね
2020/04/30(木) 04:48:14.38ID:HvDy85U60
>>730
>>731
複数人利用で関数メインだと
すぐぶっ壊されるのは分かる

あと壊れなくても長期的には
VBAの方が修正が楽だよな?
関数は処理の全体像が不透明
734デフォルトの名無しさん (ワッチョイ c763-+JA7)
垢版 |
2020/04/30(木) 06:40:13.36ID:PqPYAyi70
まぁ関数でできる処理は関数でした方が処理自体速いんだけどな
悩ましいけどセル保護だけじゃなく列や行を隠しとかもするけど、いじる人は何しようと結局いじるからね…

VBAと関数で使い分けしないとVBAはどんだけCPUのコア数あっても1コアでしか動作しないから、重たい処理になると頭打ちになる
2020/04/30(木) 07:48:59.33ID:OrbFqVlKx
ワークシート関数が処理の全体像が不明っていってる奴はたぶん関数がセル内できるのを知らないとか、テーブル機能を知らないとか、たぶんそんな感じだろう
ワークシート関数もVBAも下手くそに作ればカオスになる
2020/04/30(木) 08:27:32.50ID:/wWgOKjWM
なるべく関数はエクセル内で完結させてる
何かの呼び出しや処理のみにVBAにやらせてる
マスター版を個人で持っておく
いじられてもよほどのことが無い限り知らんふり
2020/04/30(木) 08:46:50.92ID:HvDy85U60
一年後に処理の内容全部忘れてから
もう一回見てご覧?
関数よりVBAの方が分かりやすいから
2020/04/30(木) 09:38:23.87ID:OrbFqVlKx
ワークシート関数の見通しが悪いのはシートの使い方や関数の書き方が悪いから

テーブルで構造化参照させる
多重ネストをしないように作業列を積極的に使う
多重ネストが避けられない場合ははセル内改行する
静的変数として固定セルを参照する場合は名前付きセルにする

こういう配慮をしているかどうかが大切

可読性はVBAと大差ない
VBAだって下手に書くと二度とメンテナンス出来なくなる
2020/04/30(木) 10:14:10.91ID:dUO320lFH
>>737
VBAだけ見りゃ理解できるように書いてあるんならいいさ
ハイスキルな君の書くVBAもきっとそうなのだろう
ただ、世の中のほとんどのVBAマクロはワークシートのレイアウトに激しく依存しており、
シートと見比べないと意味不明だし簡単に壊れる
2020/04/30(木) 10:50:37.55ID:KvTMWgJl0
>>713
そうなの?じゃあ俺の検索力不足だ。
教えてもらえるとありがたい
2020/04/30(木) 11:52:42.58ID:RI8oXcu50
シート連結部分はクラスにしようぜ
2020/04/30(木) 18:07:04.25ID:R8msXZW7a
クラスターつくるのか
2020/04/30(木) 20:10:03.51ID:6PshQwim0
>>737
これは分からんでもないわ
744デフォルトの名無しさん (ワッチョイ 671d-sUpK)
垢版 |
2020/04/30(木) 23:50:21.31ID:b9TIw4B40
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
745デフォルトの名無しさん (ワッチョイ a7f1-trzR)
垢版 |
2020/05/01(金) 00:54:45.32ID:+DHzH5tv0
>>744
この人タイでエッチするため在宅プログラマーになったって言ってるけど
うらやましいな
2020/05/01(金) 09:08:51.86ID:GU+C/Jnt0
はいつぎの方
2020/05/01(金) 10:00:32.66ID:6b7IUzcd0
Sub Sample2()

Dim Date1 As Date
Dim Date2 As Date
Dim i As Long

Date1 = "2018/1/1"
Date2 = "2018/4/30"

For i = 0 To DateDiff("d", Date1, Date2)

Cells(i + 1, 1) = DateAdd("d", i, Date1)
Exit For
Next i

End Sub

VBA初心者です
上記を実行すると強制終了してしまいます
どうしてなんでしょうか?
2020/05/01(金) 10:50:57.53ID:eM3SnLnx0
>>747
Exit Forを消す
あと、自分のミスで思った通りにならない時は強制終了とは言わない
2020/05/01(金) 12:14:21.59ID:gUWwrcBK0
"4/30/2018"
750デフォルトの名無しさん (アウアウエー Sa9f-kSwD)
垢版 |
2020/05/01(金) 13:10:21.56ID:n1w4ahs6a
#で括ってみては
751デフォルトの名無しさん (JP 0H9f-r+sk)
垢版 |
2020/05/01(金) 14:08:14.73ID:Lu25V/ckH
学術巨大掲示板群: アルファ・ラボ
ttp://x0000.net

物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など

PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
2020/05/01(金) 14:08:57.29ID:GU+C/Jnt0
>>747
回答としては748の通り

なぜこうなるのかわからない場合
 ・ブレークポイントを使ってどういうふうに処理が進んでいるか確認してみ?
 ・気になる行をコメントアウトをしてみる

などをするがよろし
753デフォルトの名無しさん (ワッチョイ a78e-MvRk)
垢版 |
2020/05/01(金) 15:46:49.34ID:O26w7br10
どうして馬鹿ばかり来るのか
754デフォルトの名無しさん (ラクッペペ MM8f-aR2J)
垢版 |
2020/05/01(金) 15:48:19.31ID:e9rmxAXgM
>>753
ようこそ!
2020/05/01(金) 16:42:17.98ID:w4TGDP35H
>>753
Welcome to the real world !!
2020/05/01(金) 17:52:33.49ID:XmUvZ7vC0
>>747
単純にすべての単語の意味を
把握したらそれだけで分かるよ?

最初の内は意味が分からないまま
コピペプログラミングだろうけど
ずっとそのままだと上達しない
2020/05/02(土) 03:52:34.32ID:gsxD2EFS0
皆さんありがとうございます。
初心者から脱出できるように勉強します
2020/05/02(土) 04:16:39.04ID:WlPNyw+i0
がんばれ
2020/05/02(土) 07:47:42.55ID:8I2uZvpu0
会社が休みに入って書き込みが減ったな
2020/05/02(土) 09:40:27.37ID:7uDOF2SH0
IE自動操作のマクロで

今まで動いていたが動かなくなる

コードに変化を加えると動く
(スペースでも改行でもコメントでも、プロシージャに変化があると動くようになる)

これはどういうあれなんや
2020/05/02(土) 10:47:09.64ID:8Sc54whm0
全角のスペースとかキーワード途中での改行とか

無意識にやらかしたんでないの
762デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/02(土) 11:30:23.32ID:Z+zF8E0a0
PowerQueryをVBAで使いたい初心者
>>690です。
変数に入れるファイルパスを、テーブルにしておかないと
PowerQueryは読んでくれないんだ。そのテーブル名とか列名も
指定するんだ、へ~、という現状からこの連休中に抜け出したいです。

テレワークからの連休突入前に先輩たちに投げた質問の答えは
「zoom飲み会やるから、入れとけよ。」でした。
2020/05/02(土) 11:33:04.58ID:qrZctUhv0
VBAむずいが努力だわ
昇級幅が大きい時代の残りカスの50代の職場のおっさん達が給料ばっかり高くて
ExcelのSUM関数すらわからないレベルで
電卓で計算してテンキーで手打ち
そんな信じられない存在がいる職場
「俺のやり方があるんだよ!」
とか、心の底から腹が立つ
大手で組合もあるからリストラはされないんだが
そんなやつを駆逐したい
エクセル関数は職場で使うものはだいたい使っておっさん共の10倍は早くやってきたが
更なる憎しみだけが俺のVBA勉強へのモチベーションになってる
2020/05/02(土) 11:34:32.51ID:jcfx6zQ80
>>760
そもそも、どう動かなくなるんだ?
エラーが出るのか?
Excel再起動で動くようになるか?
PC再起動で動くようになるか?

昔よくあったのがデバックやStopのように勝手に途中で止まるという奴。
F5で続行出来るんだけどまた途中で止まる。
Excelの再起動では治らんがPC再起動で治る。
2020/05/02(土) 11:44:58.03ID:u3ozWGyy0
>>760
Win10ではIEの動作が変わったのでVBAからコントロールするのがかなり大変になった

うまく動かない時は、ブラウザのキャッシュとかクッキーとか、WEBサーバの応答のタイミングとか調べる
変更しなくても時間を置けば動かないか、Excelを再起動したらどうか、パケットモニターとか調べた?
766デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 11:52:59.52ID:be7YjfFea
初めてのマクロでやりたいことはほぼ出来たのですが、新規ブックをコピー元のマクロごとコピーする方法が分かりません
xlsmで保存することは出来るのですが、どうもマクロの参照先がコピー元になっているらしく、新規ブックからマクロを実行するとコピー元のファイルをわざわざ開く形になってしまっています
マクロごとコピーする方法があればご教示ください
2020/05/02(土) 11:53:28.87ID:jcfx6zQ80
>>762
初心者がPowerQuery使うの?
その前にやることがあると思うんだが。

まず、テキストファイルを扱えるようになりなよ。
自在にテキストファイルを扱えるようになれば、どんな形式のCSVでも関係無い。
セル内改行も、そのCSVのフォーマットが分かってないのが原因。
普通はデ−タに改行が入ってるならレコード間の改行と区別する何かがある筈。
1レコードの項目数が必ず決まっている(1レコードのカンマの数が決まっている)とか、そのテキストデ―タは必ずダブルクォーテーションで挟まれており、データ内の改行はダブルクォーテーションのInとOutの間のどこかにあるとか。

もちろんPowerQueryでも良いんだけど、それでたまたま解決出来そうだから飛び付くのは良くない。
こんなもの基本的な処理の組み合わせで出来るんだから、PowerQueryで有利な何かも無いのに無理矢理使おうとしてるように見える。
2020/05/02(土) 12:25:11.14ID:E33c3GVR0
>>766
自分ではやったことないけどモジュールをそのままコピーするなら
http://officetanaka.net/excel/vba/vbe/07.htm#sample04
こういう方法じゃないかな

自分でやったことがあるのは
https://oshiete.goo.ne.jp/qa/756026.html
こちらの方法で、コードを一行ずつ書いていくことになります

ほんとにまるごとコピーでいいなら上の方法でしょうけど、thisworkbookとか
activeworkbookとか場合によって挙動が変わるような内容なら下の方法
じゃないかな
2020/05/02(土) 12:32:45.18ID:u3ozWGyy0
>>766
モジュールのエクスポートとインポートでやってみるとか
https://jizilog.com/vba-modadd
770デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 13:09:24.75ID:me7NM96ka
>>768
>>769
ありがとうございます
お恥ずかしながら、今更ながらアドインと個人用マクロブックの存在を知りました
マクロの数も多いので、毎回記述する方法は重くなりそうですし、インポートも考えたのですが、管理するのが大変そうだと躊躇していました
とりあえず、個人用マクロブックで一括管理してやってみようと思います
2020/05/02(土) 15:03:15.18ID:fjHWXn6td
>>768
これは、セキュリティ上の危険を承知するなら良いんだけどね。
今のExcelはデフォルトで動かないように設定されてるよ。

動作原理はマクロウィルスと全く同じなんで。
2020/05/02(土) 15:03:21.75ID:HkfyT0U40
>>770
マクロブックだと、最後の1ファイルを閉じてもアプリ画面が残っちゃう。
アドインだとこれを回避できる。
2020/05/02(土) 15:06:50.76ID:HkfyT0U40
>>771
そそ。D&Dでパワポにノートを読み上げるマクロをぶっ込めるvbs作ったんだけど、よく考えるとちょつと怖くなった。
774デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/02(土) 15:24:24.68ID:Z+zF8E0a0
>>767
あ、ありがとうございます。
テキストファイルから…。
連休の課題にします!
2020/05/02(土) 15:37:35.14ID:lt4kIJ5o0
>>767
VBAのスレで言うのもなんだが
PowerQueryの前にやることがVBAなのかと
2020/05/02(土) 15:54:13.09ID:WuBkO5o5x
>>762
テーブルとしての構造化参照が不要なら別にテーブルにしなくても「空のクエリ」でリテラル定数を返す接続クエリを作るなり、パラメータを登録するなりすれば良い
詳細エディタに
= "テーブル名"
って一行書けば"テーブル名"を返す定数クエリが出来上がる

あと、Letの前行に
(path as text, table_name as text, column_name as text)=>
とか追加すれば、path とtable_nameとcolumn_nameという三つのtext型の引数をダイアログ入力でクエリに渡せるようになるので、クエリ式の側をソース=Csv.Document(File.Contents(path))みたいに書けば良い。


どうしてもVBAからPower Queryをいじりたいなら
Workbook.Queries(Index).Formulaでクエリの式が読み書きできるので、Replaceを使うなりして好きにいじったらいいんじゃないの
777デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 16:19:14.33ID:be7YjfFea
>>772
なるほど、それはちょっと嫌かも
この際だからアドインも試してみることにします
778デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 17:01:28.47ID:be7YjfFea
何度もすみません
アドインを通常のマクロのように、図形などで作ったボタンに割り当てることはできないのでしょうか?
2020/05/02(土) 19:33:07.66ID:I/r+DzJx0
デバッグ中からリセットをかける際に特定の処理をさせるようなイベントプロシージャって無いでしょうか
2020/05/02(土) 21:25:13.04ID:fjHWXn6td
>>779
それは俺も知りたいね。
リセットすると確実にExcelが落ちるプログラムを安全に終了したい。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。