Excel VBA 質問スレ Part67

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 33da-3+hg)
垢版 |
2020/06/26(金) 02:01:29.56ID:uDfmpksE0
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける

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

※前スレ
Excel VBA 質問スレ Part66
https://mevius.5ch.net/test/read.cgi/tech/1589085825/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/07/15(水) 07:50:23.17ID:XJ3hJcChM
プリンタに接続してるんじゃね?
2020/07/15(水) 08:49:05.20ID:vPDzR3td0
記念パピコ
447デフォルトの名無しさん (アウアウエー Sa02-l+/r)
垢版 |
2020/07/15(水) 09:01:25.32ID:yrzZGj8Ca
ちゅーちゅーちゅぶりらチュパカブラー
2020/07/15(水) 17:34:47.36ID:vYR4+hKTa
テーブルの特定列に入力されている値から選択できるドロップダウンリストを作りたいです

【要望】
・重複なし
・(できれば)空白は除く
449デフォルトの名無しさん (ワッチョイ 768e-3Ffi)
垢版 |
2020/07/15(水) 17:39:29.54ID:yeW9Dlh/0
>>448
そうか
頑張れよ
ここは日記お断りだぞ
2020/07/15(水) 17:39:30.37ID:mQ5xmDA6a
>>444
キャッシュのなら場合そういう動作が正常
2020/07/15(水) 19:30:17.20ID:FYD4rmMFM
>>448
これがゆとり世代だ
2020/07/15(水) 20:33:22.18ID:1MtMgQ04F
質問してるじゃん
俺は答えられないけど
453デフォルトの名無しさん (ワッチョイ 05f9-eubO)
垢版 |
2020/07/15(水) 21:01:28.16ID:XJthZBxP0
「作りたいです」という決意表明だろ?
そう言えば誰かが勝手に手助けしてくれると思ってるのかね。
あ、本人かよ。
454デフォルトの名無しさん (ワッチョイ 0d01-aTVc)
垢版 |
2020/07/15(水) 21:25:35.44ID:sBHz+ETb0
平成生まれと昭和生まれは少々使用する言語が違う。
同じように日本語とは言うけれど。
2020/07/15(水) 21:35:02.16ID:8IhCO+GMM
ゆとり世代は誰かが助けてくれて当然と思っているからな
456デフォルトの名無しさん (ワッチョイ 0d01-aTVc)
垢版 |
2020/07/15(水) 21:38:36.33ID:sBHz+ETb0
そこら辺は見た目の影響も大きいんだよな。
イケメンだったり可愛かったりすると、助けてもらえるのが当たり前で生きてる。

一方、ちょっと残念な感じだと、助けてもらえることが無く生きてる。

そこら辺の感じ方が違うのは当然なんだよね。
2020/07/15(水) 22:18:05.17ID:onU8sBQ+a
俺じゃない誰かが助けてくれるんじゃね
458デフォルトの名無しさん (ワッチョイ dab5-t9FD)
垢版 |
2020/07/15(水) 22:44:18.56ID:ovUS+LpM0
覚えてものにしようと断固たる決意でマクロを完成させたけど
最初の方に組んだプロシージャを今見てもほとんど覚えてないわ
メンテナンスだけはできるようにコメントつけてあるけど
これがネットで拾い集めて基礎を学ばない相変わらずの俺のダメスタイル
2020/07/15(水) 23:23:50.74ID:xZi/KI4S0
コメント残してるだけだいぶマシ
460デフォルトの名無しさん (ドコグロ MM0d-HVEE)
垢版 |
2020/07/16(木) 00:53:10.42ID:9MD/+BL5M
個数や最終行などよく使う変数名は今後の為に統一させたほうがいいな
その時の気分でいろいろと変えると後で意味不明になる
2020/07/16(木) 02:52:22.64ID:OfRWrGue0
古いソースをコピペするからそうなる
2020/07/16(木) 09:14:27.30ID:PzZafv3e0
そして統一後気が変わって全て置換か
2020/07/16(木) 09:39:51.11ID:6lIeM5zt0
何の変数かコメント付けるだけで十分では
2020/07/16(木) 11:51:40.64ID:iXWxOn5X0
同じフォルダ内の"取引実績"ブックの"関東地区"シートのA列・B列・C列・J列・L列・AD列の
それぞれ2行目から最下行までを配列に入れる方法を教えてください

Workbooks.Open ThisWorkbook.Path & "\取引実績", ReadOnly:=True

i = Sheets("関東地区").Cells(Rows.Count,1).End(xlUp).Row

ReDim SiresakiArray(i -1, 6) As Variant
'代入するのはA,B,C,J,L,AD列のみ
SiresakiArray() = Range("A2:??????

ActiveWindow.Close
2020/07/16(木) 12:20:55.35ID:Bld7disAr
いらん列を消せば?
2020/07/16(木) 12:29:13.40ID:GzNgEuWKM
みんなvbaどうやって勉強してるの?
しっかり参考書とか買って、じっくり?
ちなみに自分は>>458に近いスタイル
必要に迫られたらネットで検索して、ちょっと弄ってって感じ
だからいつまでたっても上達しない・・・
2020/07/16(木) 12:41:43.01ID:Bld7disAr
消したらrange("a2").resize(i,6)
2020/07/16(木) 12:45:12.35ID:6lIeM5zt0
コピペするだけで身に付くわけがない…
そのコードが何をしてるのか理解できるまで調べて自分で使っていれば自然に身に付く

>>464
いらん列消すか、いる列の2行目から地道に入れる
469デフォルトの名無しさん (ブーイモ MMa1-t9FD)
垢版 |
2020/07/16(木) 13:00:26.82ID:jRyYUilTM
これできるようにしてくれない?
これって自動でならない?
職場の糞どもの質問は完全に無視してる
テメーの昼休憩にずっと触ってるスマホで調べりゃ出てくるだろ
話しかけんな
2020/07/16(木) 13:38:13.07ID:PzZafv3e0
その人が楽するためなら何もしないな
あえて普段はどうやってるか聞いてみて嫌な顔一つしない感じならやる
471デフォルトの名無しさん (ワッチョイ ee8c-aTVc)
垢版 |
2020/07/16(木) 14:52:54.75ID:2egBYvX50
>>464
Sub hoge1()
Dim aa As Variant
aa = Range("a1:c3,e1:f3")
'結果:a1:c3までしか入らない。なるほどね。
End Sub


Sub hoge2()
i = Cells(Rows.Count, 1).End(xlUp).Row
ReDim siresakiarray(i - 1, 6) As Variant
retsu = Array("A", "B", "C", "J", "L", "AD")

For iic = 0 To UBound(retsu)
For iir = 2 To i
siresakiarray(iir - 2, iic) = Cells(iir, retsu(iic))
Next
Next
'
Worksheets.Add
Range("a1:m999") = siresakiarray

End Sub

一つずつ入れるならザックリこんな感じのロジックで。
他の方法として新しいシートにシートコピーして列を消して配列に挿入の方が
効率いいのかも どうだろう
2020/07/17(金) 00:37:14.96ID:27Ma2AbZ0
少し組んで改善するとまぁ評価はされるんだけど
他の人後でメンテナンスできるよな?
とか
マクロが壊れる心配ないよな?とか

テンプレートのように言われるけど知るかよ
読み取り専用で配布してるしプロシージャ弄れないようにしてあるし壊れねーっつーの
パスワードかけてないマスター版も社内サーバーに置いてあるから
いじりたきゃ学べや

あと配布した途端楽になったらその業務ばっかりやろうとするおっさん見苦しくてむかつく
配って損したわ
2020/07/17(金) 08:36:30.29ID:KHrOLv580
あれ?ここ日記帳だっけ?
2020/07/17(金) 09:55:37.13ID:q+bHJv+q0
みんなの日記帳だよ
君も自由に書き込んでいいよ
2020/07/17(金) 11:03:50.73ID:lcXPd8bd0
>>465,468,471
ありがとうございます。列を削除して取り込みます。
2020/07/17(金) 11:46:31.69ID:lcXPd8bd0
配列 ary(1,6)に年月日(2020/7/18)が入っていて、配列ary(1,7)には何らかの値が入っていることがあります
ary(1,6)を20日締で起算して、ary2(1,1)に"20_7"のような文字列を返す式を教えてください。
またary(1,7)に値が入っていれば翌月にずれるようにしたいです

ary(1,6)="2020/7/18"
ary(1,7)= ""
の場合ary2(1,1)="20_7"

ary(1,6)="2020/7/21"
ary(1,7)= ""
の場合ary2(1,1)="20_8"

ary(1,6)="2020/7/18"
ary(1,7)= "値"
の場合ary2(1,1)="20_8"

ary(1,6)="2020/12/20"
ary(1,7)= "1"
の場合ary2(1,1)="21_1"
2020/07/17(金) 12:02:43.77ID:0sNlDakf0
型はなんなの?
くそコードでもいいからひとつずつ考えて作ってみたの?
2020/07/17(金) 12:07:44.33ID:NYWT4Zhl0
の場合、とか言ってるんならif使えばいいだけだろ
アホなのか
2020/07/17(金) 12:46:43.52ID:0sNlDakf0
書いてみた
理解しなきゃ使えないと思うが


https://i.imgur.com/3Ynd7KW.png

https://i.imgur.com/5mFzai4.png
2020/07/17(金) 15:02:49.46ID:lcXPd8bd0
>>479

完成しました。ありがとうございました



dt = CDate(ary(1,6))

If Cint(Format(dt,"d")) > 20 Then '20日以降か

dt = DateAdd("m",1,dt)

End if

  '空欄でなければさらに1カ月繰り上げる

If AfuriArray(cnt-1,26) <> "" Then

Else

 dt = DateAdd("m",1,dt)

End If

ary(2,1) = Right(Format(dt, "yyyy"),2)&"_"& Format(dt,"m")
2020/07/17(金) 21:27:08.31ID:27Ma2AbZ0
来年の役員報告の課の改善発表の内容に
俺のマクロで作る事が既に組み込まれてるんだが
そもそもそこまでスキルないし年上のもっと給料もらってる奴にやらせろやカスが
2020/07/17(金) 23:08:06.59ID:Bh4mGSGka
って言えばいいじゃん
2020/07/18(土) 15:07:16.47ID:aMbjCCwU0
日本語環境でmiLANG_JAPANESEを指定してもbad languageのエラーが出るのは何故?
2020/07/18(土) 16:11:19.98ID:gXGI8VY40
敗戦国だから
2020/07/18(土) 18:26:41.44ID:6ntZQZs40
sheet"s1"にFunctionで処理したary2を貼り付けたいのですが、処理前のary1が貼り付けられます
Function後のary2を貼り付けるにはどうすればよいですか?

Sub test()
Dim endrow, r As Long
endrow = Sheets("rui").Cells(Rows.Count, 1).End(xlUp).Row
ReDim ary1(endrow - 1, 6)

ary1() = Sheets("rui").Range("A2:F" & endrow).Value
Sheets("sh1").Range("A2:F" & endrow) = ary2(ary1())
End Sub

Function ary2(ary1() As Variant) As Variant()
Dim en, r As Long
en = UBound(ary1())
For r = 1 To en
ary1(r, 1) = Application.Asc(ary1(r, 1))
ary1(r, 1) = StrConv(ary1(r, 1), vbUpperCase)
ary1(r, 1) = Replace(ary1(r, 1), " ", "")
Next r
End Function
2020/07/18(土) 19:22:36.82ID:BZh66Ti/a
>>485
そりゃあ貴方、ary2は関数ですと自分で宣言してるもの。
しかもary1に代入してますやんかー
プログラムは命令通りに動作してるだけじゃん。

ary2の配列を準備して処理してから
そのary2の内容をシートに展開すようにプログラムしなきゃ
2020/07/18(土) 20:24:50.23ID:6ntZQZs40
>>486
ありがとうございますFuntionの使い方を誤解していましたm(_ _)m
2020/07/18(土) 22:33:50.97ID:6aEbh+KL0
Function大魔王
489デフォルトの名無しさん (ドコグロ MM0d-HVEE)
垢版 |
2020/07/18(土) 22:50:59.73ID:GbMN9IfrM
>>485
Functionの配列渡しは少しややこしい
まずは内容を単純化して正解の型を見つけた方がいいと思う
490デフォルトの名無しさん (ドコグロ MMc2-brDT)
垢版 |
2020/07/18(土) 23:52:10.32ID:UVKbM6jvM
>>485
単純化した一つの正解の型

Sub test()
Dim ary() As String
ary() = fnc
MsgBox ary(1)
End Sub

Function fnc() As String()
Dim ary(1) As String
ary(1) = "a"
fnc = ary()
End Function
2020/07/19(日) 01:27:51.35ID:YQjQ9IMi0
配列の扱いや参照渡し以前の問題では・・・
492デフォルトの名無しさん (ワッチョイ 768e-3Ffi)
垢版 |
2020/07/19(日) 02:51:36.02ID:b8b+mHAS0
結局、馬鹿には無理なんだよ
2020/07/19(日) 02:54:31.21ID:MOwnlnDY0
joinして受け渡ししてsplitで復元がシンプルでわかりやすいんじゃね?
2020/07/19(日) 06:42:33.41ID:xggXZiaY0
もう企業ユーザーにはOffice Script解放されてるみたいですが試された方、使用感どんなもんですか?
2020/07/19(日) 08:30:43.83ID:du465xO70
調査してる最中じゃねーの、あわてんな
2020/07/19(日) 14:09:46.91ID:4shkrYfWd
>>485
ary2の宣言部分は正しい。
でもary2の内部でary2はどうなったの?
何もしてないよね。
ary2の内部でary2はこうなりましたって書かないと宣言した時点の空の配列が返るのが当然。

つまりary2のFunctionの最後にary2=の文が必要。
2020/07/19(日) 14:11:26.48ID:4shkrYfWd
>>490のfnc=any()の文が正にそれ。
2020/07/20(月) 12:06:47.51ID:Dkhdkwhma
excelなんだから配列はセルにいれときゃいいんじゃね
2020/07/20(月) 18:29:09.95ID:3yLiDe7EM
速度気にしないなら
2020/07/20(月) 23:22:10.32ID:87nc/Vc+0
全然気にしない
2020/07/20(月) 23:52:01.41ID:3H73W2vZ0
配列は大量に入れるとメモリ不足になるのが嫌。
値以外のプロパティ持ってるセルの方がよっぽどメモリ喰うだろって思うけど、
仕様だから仕方がない。
2020/07/21(火) 07:20:28.10ID:s4f7WPjJd
メモリ不足になるほど大量に入れることなんて殆ど無い。
不足するのは別の理由だと思うが。
2020/07/21(火) 10:31:44.78ID:8QcWJiTk0
10万行のCSVとか配列で処理したくなるけどメモリ不足になるんで仕方なくワークシートに入れてる
2020/07/21(火) 11:09:54.82ID:GBbtTx0BM
VBAは過去のしがらみが多いので64bit Excelでも変な制限があってびっくりする
最近経験したのはユーザー定義型の中の配列サイズ
Type T
A(33000) As Integer
End Type
Sub S
Dim X As T
End
ってやるだけで「動的なローカル変数が多すぎます」って言われる
A(32000) As Integer
なら問題ない
2020/07/21(火) 11:43:12.61ID:uXgtcpNna
intの最大の32767だろうね
2020/07/21(火) 12:27:55.57ID:Z8jTNyVcM
オフィススクリプト試したい…
個人ユーザーにも解放してくれ…
2020/07/21(火) 13:35:34.68ID:420tjBmwd
csvを文字列形式のセルに取り込む時、値がない場合は""とemptyどっちにしておくべき?
508デフォルトの名無しさん (ワッチョイ 7df1-+aB8)
垢版 |
2020/07/21(火) 14:38:12.66ID:zc+r4po80
office田中の人が顔出しでYoutubeはじめたらしいが
おじいちゃんで偉そう。
実世界なら関わりたくないタイプ。
2020/07/21(火) 19:47:20.41ID:g0ULgQg00
ネット上でも関わり合いになりたくないタイプだろ
2020/07/21(火) 21:24:07.75ID:fmBf+klc0
自分の参考になるとこだけ聞いときゃいいんじゃないの?
その他アレコレ言うのはどうかと思うぞ
2020/07/21(火) 22:50:12.29ID:nbzaQebba
>>503
1レコードずつシーケンシャルに処理できないの?
2020/07/21(火) 23:00:00.64ID:q3mQwKOX0
複数の同じ形式で入力されたブックをマージしたんですが、テキストを連結する場合に区切り文字を「|」にしました
(「|」は入力時には使用していません)
ファイルが3つ(A.xlsx,B.xlsx,C.xlsx)、それぞれのブックの値をa,b,c(テキストのみ、数値なし)、セルの値は
空白可だとすると、マージ後のあるセルの文字列は

a|| a|b| a||c |b| |b|c ||c a|b|c |||

のいづれかになりますが、このうち左端及び右端の「|」は削除、連続する「|」は「|」ひとつに統合、すべて「|」の
場合はセルを空白にするにはどうすればいいでしょうか?余分なスペースを削るTrimのようなことを任意の文字でしたい、
という趣旨です。処理後は以下のようにしたいです

a a|b a|c b b|c c a|b|c 空白のセル

一旦「|」をスペースに置換してTrim関数で余分なスペースを削ってから再度スペースを「|」に置換すればできるんですが、
もうちょっとスマートな方法があるのかなということと、意図して連続したスペースを入力していたらTrimで消えてしまうので
そういった場合に備える意味も含めていい方法があれば教えてください
513デフォルトの名無しさん (ワッチョイ ee8c-sTnA)
垢版 |
2020/07/21(火) 23:08:39.79ID:aJyp0F9S0
Excel2019です
外部CSVをpowerqueryで取り込んで整形したのちシートに貼り付けてあるテーブルがありまして、
ファイルを立ち上げる度にこのテーブルを自動で更新させるところまではできました。
この後、更新完了後に自動的にCSVファイルを保存、終了させようと考えているのですが
更新完了のイベントがどうもわかりません(見当たりません)。

アドバイスをいただけないでしょうか
よろしくおねがいします。
2020/07/21(火) 23:15:37.99ID:rncf75Mgd
>>513
スマートさは知らないが正規表現で置換するとか
2020/07/21(火) 23:16:26.19ID:rncf75Mgd
間違えた
>>512
2020/07/22(水) 01:35:45.12ID:2/9nnKBr0
>>507
null 値は文字列型じゃなく、
型もない、または、null型だから、空文字列ではないと思う

>>513
>このテーブルを自動で更新させるところまではできました
この処理の後に、やりたい処理を書けば?
2020/07/22(水) 02:45:59.48ID:V5aeR2xw0
>>512
/^\|+|\|+$//
/\|+/|/
518デフォルトの名無しさん (ワッチョイ 29f1-4Yr4)
垢版 |
2020/07/22(水) 03:16:01.58ID:hQWVf2dN0
>>517
v(^^)/~
2020/07/22(水) 03:56:58.93ID:F4KuFXOj0
>>511
ファイル操作はセル操作以上に重いからできるだけまとめた方が速くなる
2020/07/22(水) 08:03:26.55ID:eX+7X9u9a
>>519
そう?
2020/07/22(水) 08:33:57.99ID:6gIpTQrUd
>>503
10万を一気に配列に入れるの?
5000行ぐらいずつで処理できんの?
2020/07/22(水) 08:40:56.01ID:6gIpTQrUd
>>512
1.連続する|を1つにする。
2.両端の|を消す。
523デフォルトの名無しさん (ワッチョイ 0963-VaRO)
垢版 |
2020/07/22(水) 16:49:33.87ID:aRPEdkhK0
ExcelWebAddinっていうのを使ってWebフォームの入力を自動化しようとしていますが、ラジオボタンにチェックを入れるにはどのようなコマンドを入力すれば良いのでしょうか?
2020/07/22(水) 17:06:35.37ID:F072B1Mr0
1人だけマクロ作って超楽に終わらせてるのがバレたわ
改善提案で出して8000円賞やるから他の奴らにも配って共有化してくれと言われた
まぁ仕方ない
でもまぁマクロはこっそり作って自分で運用するに限るね
次にそういうのできたら発表で使ってくれだと
2020/07/22(水) 17:17:55.78ID:nFYyDION0
こっそり使わないと
マクロ適用できないように仕変されるよ
2020/07/22(水) 17:25:20.04ID:F072B1Mr0
Excelを使った業務が95%くらいの職場だから問題ない
逆に使いにくいwordを俺が改善で駆逐していってたが今回のはみんなに配りたくなかったけどまぁ仕方ないか…
在宅の日なんて他の人が半日かかるのを5分だったのに…
2020/07/22(水) 17:55:11.21ID:vvOOySn70
>>524
そういうのさあ、共有してあげてもいいけど、共有すると知的障害の人が仕様の異なるものに適用して失敗して文句言ってくるのが目に見えてるんだよね
だからといっていろんなケース想定してプログラミングするのはアホらしいし
2020/07/22(水) 18:47:51.04ID:urXipo8c0
むしろあえて自分用に最適化して「共通部分以外はできません」でもいい
2020/07/22(水) 19:56:15.37ID:nFYyDION0
いつのころからかマクロを忌み嫌い極限までVLOOKUPで済ませるようになった
2020/07/22(水) 19:58:49.72ID:ILXZvJ+B0
index/matchは使わないのw
531デフォルトの名無しさん (ワッチョイ d1e6-l24t)
垢版 |
2020/07/22(水) 20:03:08.77ID:SXXgaLVH0
オレオレ証明書でスムーズに使えるかと思ったら
証明書付けると逆に使えなくなったり
嫌がらせが半端じゃなかったしな
今では設定がどこにあるのかすら分からん
2020/07/22(水) 21:55:35.93ID:F4KuFXOj0
XPの頃はオレオレ証明書を作ってたけど、そういや今は作らなくても動いてるな
何がどう変わったのか把握してないわ
2020/07/22(水) 22:08:08.79ID:Fc7dRB3XM
今ならxlookupがある。

あと関係ないけど、スプシのquery関数輸入してくんないかなぁ…あんなのに特許とか無いでしょ?
2020/07/23(木) 02:13:32.09ID:Iky/Pkwz0
あるだろう
使われてないけど
2020/07/23(木) 02:31:09.52ID:KC5IdKq10
シートのコード名をマクロから変更することはできますか?
2020/07/23(木) 02:32:42.56ID:vlSabEZu0
できるわけないだろ
2020/07/23(木) 02:42:45.18ID:KC5IdKq10
まじか!
2020/07/23(木) 02:44:48.35ID:hi69YBSQa
シートのコード名ってなんだ?
2020/07/23(木) 02:46:02.22ID:vlSabEZu0
プロシージャ名じゃね
知らんけど
2020/07/23(木) 02:50:40.32ID:hi69YBSQa
設定を変更する必要はあるけど、VBproject を編集できるかもね
2020/07/23(木) 03:09:52.56ID:u9f9fzuBr
>>535
値取得のみ可
https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.codename
2020/07/23(木) 03:16:02.13ID:togpUAVc0
>>526
もしかして長文資料もExcelで作っちゃう系?
それはそれで絶対やめとけよ
2020/07/23(木) 03:21:02.63ID:KC5IdKq10
>>541
やっぱり値取得だけなんですね。
ありがとうございました。
2020/07/23(木) 07:12:45.90ID:i+261XKMd
>>543
何で変えたいの?
545デフォルトの名無しさん (アウアウエー Sae3-Ar/h)
垢版 |
2020/07/23(木) 07:16:32.96ID:kdPZXO8Ra
世の中が気に入らないから
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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