Excel VBA 質問スレ Part68

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ dbda-8BP0)
垢版 |
2020/08/30(日) 11:55:27.33ID:Oy/VxFsh0
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける

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

※前スレ
Excel VBA 質問スレ Part67
https://mevius.5ch.net/test/read.cgi/tech/1593104489/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/10/23(金) 21:25:05.79ID:9+IFx01J0
問題に取り組む姿勢がおかしい
2020/10/23(金) 21:51:10.18ID:DQVFwAwV0
>>631
>他ファイルの読込

俺はこいつが異様に遅くて困ってる
100万個ほどのデータをCSVから読ませてるんだけど6世代i5で3分、セレロンだと10分とかかかる
Lineで1行ずつ読んでるせいなんだろうけどQueryだと早いんだろうなあと思いながら面倒で手を付けてなかった
これを機にやってみるかなぁ
実際相当早くなるもんかね?
2020/10/23(金) 22:37:29.74ID:jmwa0xlU0
何をやってるかにもよるがそもそも一度に全部読み込まなきゃいいんじゃね
2020/10/23(金) 23:22:27.59ID:/Kxbsbpt0
曜日の色付けなんてWEEKDAY関数と条件付き書式で良くないか?
曜日ごとに文字列記入するところはマクロにしてるけど
2020/10/24(土) 06:26:18.80ID:Uy2SF5SV0
>>634
>一度に全部読み込まなきゃ

そうやねぇ・・・
週ごとにデータを集計してんだけどいまんところ一括で読み込ませてる
常時PC立ち上がってる環境だから逐次データ吸い上げていけば一番いいんだけどそうなると小手先の変更じゃなくて大枠に手を加えなきゃなんなくなるのが頭痛いところ
てかこんなのエクセルでやらせんなよって話でもあるんだけどそうはいかない
2020/10/24(土) 08:29:55.58ID:Q0nf4D4p0
>>635
それでも良いんですけど、行ごとに工程の開始日と終了日を設定して工程の期間のセルは計画達成率ごとに緑、黄、橙、赤って着色する必要があり、その着色は開始日が平日なら土日祝日は着色しない、開始日が土日祝日なら期間中全てのセルを着色
とかやるんで条件書式でやるのかなり面倒なんですよね
ユーザーには進捗率をスケジュール表に記入させるんですけど今日以降の進捗率は入力があっても認識から外さなければならないって仕様もあったりするんで
2020/10/24(土) 10:23:24.93ID:EYzilKe/0
そのぐらいなら自分なら条件付き書式でやる
2020/10/24(土) 10:53:59.72ID:Fj5xdFDia
毎回全部のデータつくりなおすのか
差分だけやるとか分割するとかしないのね
640デフォルトの名無しさん (ラクッペペ MMe6-1Dkg)
垢版 |
2020/10/24(土) 12:24:40.86ID:9i+KquaLM
あるフォルダに複数のエクセルがあります。
シートは必ず一枚。
一番ファイル名が短いエクセルに
他のエクセルのシートをコピーしてまとめたい。
どう書けば楽ですか。
2020/10/24(土) 12:36:09.77ID:Gp+9LQQ1p
>>640
一番短いファイル名で同じ長さのものが有った時点で破綻

次の方どうぞ〜
642デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/24(土) 12:41:50.27ID:hS/lv/UK0
その問題を作った先生を問い詰めろ!
643デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/24(土) 12:43:08.02ID:hS/lv/UK0
>>640
前提条件にリアリティがなさすぎるw
2020/10/24(土) 13:11:38.58ID:uN2dIIGs0
>>640
「わかりません」って書いとけばいいよ
2020/10/24(土) 13:18:00.47ID:Lxq4fMOo0
>>640
その通り書けば楽です
646デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/24(土) 13:35:27.35ID:hS/lv/UK0
エクセルがあるとは何ですか?
647デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/24(土) 13:37:23.43ID:hS/lv/UK0
Excelファイルのことを単にExcelと呼ぶのも違和感がある。
648デフォルトの名無しさん (ラクッペペ MMe6-1Dkg)
垢版 |
2020/10/24(土) 13:45:51.01ID:9i+KquaLM
>>641
同じ長さになることはありません
説明不足ですみません
2020/10/24(土) 13:46:27.15ID:EYzilKe/0
何を条件にした楽なのか?
650デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/24(土) 15:19:09.43ID:hS/lv/UK0
ファイル名のことなんてあとで考えればよい。

まず手順を考えてください。

ファイル名は重要ではありません。
2020/10/24(土) 15:29:59.50ID:VJA5Q+pD0
いつものあいつっぽい
2020/10/24(土) 15:59:31.92ID:h35l0z5Z0
シート"土曜日の小計"のA2から、祝日と会社の休業日以外の土曜日を書いていくマクロを考えています。

(シートカレンダーのA列に日付、B列にA列の日付が祝日であれば"1"が入力してあり、C列に会社の休業日なら"1"が入力してあります)

このマクロだと、「424 オブジェクトが必要です」になります。どう書けば良いですか?



Dim a As Long,r As Long

a = 2

For r = 1 To 365

 If Weekday(DateAdd("d", r, Date)) = 7 And _

   Worksheet.Function.VLookup(DateAdd("d", r, Date), Sheets("カレンダー"), 2, False) <> 1 And _

    Worksheet.Function.VLookup(DateAdd("d", r, Date), Sheets("カレンダー"), 3, False) <> 1 Then

Sheets("土曜日の小計").Cells(a, 1) = DateAdd("d",r,Date)

  a = a + 1

End If

Next bc
653デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/24(土) 17:14:11.51ID:hS/lv/UK0
>>652
http://officetanaka.net/excel/vba/error/execution_error/error_424.htm
654デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/24(土) 17:16:31.42ID:hS/lv/UK0
>>652
可読性の悪さw
2020/10/24(土) 17:22:25.13ID:VJA5Q+pD0
土曜日のことを聞いていたのは例のあいつ
656デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/24(土) 17:24:29.58ID:hS/lv/UK0
>>652
どのワークシートなのか指定がないけど?
2020/10/24(土) 19:06:56.46ID:kz7Ernxq0
例のあいつが好きな人か
2020/10/24(土) 19:44:26.47ID:EYzilKe/0
オブジェクトの指定も無いし存在しない命令も書いてあるし
2020/10/24(土) 19:53:11.40ID:rvK7EvYrd
>>610
個別的になるが出来る。
Application.VBE.ActiveVBProject.References.AddFromFileを使う。

VBEを弄るからセキュリティがザルだ。
わかってる奴以外は使わないことをお勧めする。
660デフォルトの名無しさん (ドコグロ MM4a-stnX)
垢版 |
2020/10/24(土) 20:28:18.61ID:UZJZIrrqM
>>652
Sheets("カレンダー")のあとにセル範囲を書けば動くんじゃね
2020/10/24(土) 21:19:11.38ID:9VZVkXWLd
理解しないまま適当にいじって、エラーが出る位置を見直そうともせず修正丸投げか
2020/10/24(土) 23:09:15.96ID:ZLw1Oaa2M
だっていつもの人だもの
2020/10/24(土) 23:35:43.13ID:h35l0z5Z0
>>653

どこにSetをつければいいか分かりません





>>652

どうやって指定すればいいですか?





>>660

Worksheet.Function.VLookup(DateAdd("d", r, Date), Sheets("カレンダー").Range("A:C"), 2, False) <> 1



でも同じでした
664デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/25(日) 01:39:45.83ID:eXluQ9/t0
うるさい
2020/10/25(日) 02:05:19.43ID:mQ0mp2TEM
>>663
いい加減にしろや
死ね
2020/10/25(日) 11:43:41.49ID:R1nDOxYO0
>>663
基本的なことができてないようなので職場の他の人に頼んだ方が早いだろう
667デフォルトの名無しさん (ワッチョイ ee63-9Kcm)
垢版 |
2020/10/25(日) 12:51:32.04ID:6oKLzf6v0
ある変数に、なんでもいいから100文字セットしたい場合って
どの関数使えばいいの?

str = "*****..."(100文字)
と書くのはダサいから嫌です
2020/10/25(日) 12:58:10.18ID:cOgZifE90
ダサいとする基準は?
2020/10/25(日) 13:44:52.27ID:eJOhPHQ60
>>667
WorksheetFunction.Rept("あ" ,100)
2020/10/25(日) 14:25:26.14ID:f7KUnMgPd
>>667
String(255,"*")
2020/10/25(日) 14:26:14.56ID:f7KUnMgPd
100文字か。
String(100,"*")
2020/10/25(日) 14:53:37.82ID:SDXJVscja
>>667
その質問のほうがダサい
673デフォルトの名無しさん (ワッチョイ ee63-9Kcm)
垢版 |
2020/10/25(日) 17:29:34.56ID:6oKLzf6v0
>667
です
669-671
おかげさまでできました有難う天才たち
2020/10/25(日) 19:06:05.20ID:DNLjJymIM
やっぱりいつものあいつでしたとさ
675デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/25(日) 19:23:20.13ID:eXluQ9/t0
なんでもいいという要件がわからない。
2020/10/25(日) 20:13:10.48ID:R1nDOxYO0
からかわれている
2020/10/25(日) 20:37:35.14ID:cOgZifE90
というかバカにされてるなたぶん
678デフォルトの名無しさん (ワッチョイ d163-9Kcm)
垢版 |
2020/10/25(日) 21:38:09.03ID:eeV8PNBf0
複数行まとめてコメントアウトしたい場合
どう書けばいいですか
一行ずつ'を入れたくないです。
2020/10/25(日) 22:03:05.56ID:D3cPjOx/a
選択されたら行範囲をすべてコメント化/コメント解除はツールバーにある
そのバーが非表示だと表示しなければダメだが
あと、推奨されるかは分からないけど、

#if 0 then

コメント化したい行

#end if

とかよくやります
2020/10/25(日) 22:04:11.05ID:D3cPjOx/a
出だし
選択された行範囲…
です
2020/10/25(日) 22:18:31.00ID:D3cPjOx/a
自分で書いておいてなんだけど、#でぃれくてぃぶによるコメントはお勧めしません
知っておいてよいかも、で
2020/10/25(日) 23:22:51.95ID:JTBNO/Ek0
>>678
行の末尾に半角スペースとアンダーバーを入れて次の行と繋げてしまうとか?
2020/10/26(月) 00:23:04.45ID:qmNjcSj20
>>678
数行程度の編集作業で手を抜くってのはどうかな
むしろそのコメント残さないで削除した方がいいんじゃね
一時的に処理を分けるならプロシージャとかで追い出して呼び出し部分をコメントにするとかあるけど
684デフォルトの名無しさん (ワッチョイ fd5f-orSx)
垢版 |
2020/10/26(月) 12:01:16.14ID:fNFJMgyU0
>>678 は釣り
2020/10/26(月) 14:18:17.78ID:qmNjcSj20
やっぱりそうか
2020/10/26(月) 22:12:59.62ID:jYeoL4370
元々スプレットシート使ってて最近vba始めたんだけど
エクセルのvbaではスプレットシートで言うとこのsetvaluesみたいなのはないの?
2次配列をシートに貼り付けるみたいなことしたいんだけど
2020/10/26(月) 22:13:37.01ID:jYeoL4370
2次配列じゃなくて多次元配列でした
2020/10/26(月) 22:18:23.63ID:LUihbr1y0
>>687
VBAは2次元配列限定でRangeに代入すればまとめて書き込んだり読み取ったりできる
689デフォルトの名無しさん (ワッチョイ c2e6-E8a6)
垢版 |
2020/10/27(火) 00:26:27.42ID:bFDGidnH0
VBAはなぜか裏技っぽい文法が好きらしい
Midステートメントなんて最悪
2020/10/27(火) 01:13:56.57ID:86zqMFTdM
>>686
>>689
釣られないように
2020/10/27(火) 02:21:37.66ID:rqaBQIGU0
>>688
何度もすいません
例えばこんな感じでrangeの範囲がわからない場合rangeのとこどうしたらいいの?

dim tmp
tmp = worksheets("sheet1").usedrange
worksheets("sheet2").range()= tmp
2020/10/27(火) 02:24:20.74ID:rqaBQIGU0
ソース間違いです

dim tmp
tmp = worksheets("sheet1").usedrange.value
Worksheets("sheet2").range()= tmp
2020/10/27(火) 02:30:47.78ID:9HNq6CFYd
例のあいつ
2020/10/27(火) 11:38:27.45ID:ptoZa2VhM
Wordの2ページ目以降にラベルを追加する方法について教えてください

エクセルからWordを呼び出して、ラベルを追加しようとしています
以下のように記載しました

Set newDoc wdApp.Documents. Add
newDoc.Shapes.AddLabel msoTextOrientationHorizontal, 35, 300, 30, 20

AddLabelの第二引数(300になっているところ)を増やせば2ページ目以降に追加されると思いましたが消えてしまい上手くいきません

すみませんがどうすればいいかご教示お願いいたします
2020/10/27(火) 12:32:20.10ID:g67UH/S6d
>>692
それ、Rangeの範囲わかるよね。
2020/10/27(火) 16:07:03.53ID:rqaBQIGU0
>>695
わからない場合です
いちおうuboundとかで出せるのは分かるけど流石にこれだと増長すぎるかなと
worksheets("sheet2").range(cells(1,1),cells(ubound(tmp),ubound(tmp,2))) = tmp
2020/10/27(火) 18:11:55.01ID:l1bcXJEN0
VBAを使うには記述の冗長さは諦めたほうがいい
その書き方で大正解だ
2020/10/27(火) 18:13:10.53ID:l1bcXJEN0
VBAの何が終わってるってこう言う書き方に少しも疑問を覚えない老害がいっぱいいるんだよな
2020/10/27(火) 18:22:43.09ID:qZwcfAyua
一旦変数にいれればいいんじゃね
2020/10/27(火) 18:42:07.59ID:6WpiGXJ0M
疑問に思ったところでどうしようも無く無いか
自分でクラスでも作るとか?
2020/10/27(火) 18:50:59.46ID:D9T+kNV20
冗長にしたくなければテーブル使うのが1番手っ取り早いかなぁ
プロパティの分かりづらさとネット検索結果の貧弱さは仕方ない
2020/10/27(火) 19:33:07.02ID:w/TzFTqy0
>>697
resizeはどうだ?
2020/10/27(火) 19:35:27.63ID:w/TzFTqy0
最近おもいついたこと
ワークシート関数→波紋
VBAマクロ→幽波紋
2020/10/27(火) 23:01:35.17ID:o6G0sPC10
>>689
裏技っぽいかは知らんがこれ好き
a = b = c
705デフォルトの名無しさん (ワッチョイ 0563-9Kcm)
垢版 |
2020/10/27(火) 23:03:09.41ID:gj2Ohu8L0
>>679
ありがとうお勧めではないそうですが
教えてくださった方法でコメントアウトできたので
使いますww
2020/10/27(火) 23:05:41.35ID:WVQXu4mGa
代入が式の言語だと、結果 a、b、c が同値になるし、イヤだなぁ…
2020/10/27(火) 23:13:03.58ID:WVQXu4mGa
>>705
[表示]-[ツールバー]-[編集] で表示られるアイコンの左から9番目で選択範囲を一括コメント化、その右のアイコンでコメント解除
それも試してみてください
2020/10/27(火) 23:23:37.13ID:2iVpt4JMa
>>704
おれは嫌い
709デフォルトの名無しさん (ラクッペペ MMeb-4t7V)
垢版 |
2020/10/28(水) 06:32:08.53ID:MUExsF8QM
マクロ実行後、
エクセルファイルを保存しようとすると
プライバシーに関する注意
というメッセージが出ます。
出ないよう設定できるようですが
セキュリティ的に不安です。
皆さんどのような対処をされてますか

いったんエクセルを全部終了するくらいしか
思いつきません
2020/10/28(水) 06:48:10.23ID:MGib4+U5M
マクロ実行後、 ←この時点で手遅れ
711デフォルトの名無しさん (ラクッペペ MMeb-4t7V)
垢版 |
2020/10/28(水) 08:53:47.67ID:MUExsF8QM
>>710
実行前に他のエクセルを終了するのが
一般的でしょうか
2020/10/28(水) 12:22:09.47ID:VqefcRCnM
>>704
好きとか嫌いとかじゃなくて
If b = c Then
a = True
Else
a = False
End If
みたいなコード書くなら
a = b = c
ッて書いた方が楽じゃね?
2020/10/28(水) 12:26:16.35ID:SBFJNMXDM
後から見直すときに前者の方が見やすい
書く時に楽かどうかは別にどうでもいいです
2020/10/28(水) 13:08:13.57ID:Gcn0+siH0
a = (b == c)
ならいいんだけどなぁ
715デフォルトの名無しさん (ラクッペペ MMeb-rMvQ)
垢版 |
2020/10/28(水) 13:28:06.88ID:ArgZkv9MM
インタプリタの時代にif文の構文解析が遅いからって可読性皆無の謎の数式書いてた思い出
716デフォルトの名無しさん (ワッチョイ 8bf2-+/f8)
垢版 |
2020/10/28(水) 15:35:13.90ID:0lSgHaJH0
>>697
教えてくれてありがとうございます
これが普通なんですね
仕方ないので暫くはこれで大人しく頑張ってみます
何か荒れてたとこに変な質問して申し訳ありませんでした
2020/10/28(水) 18:57:08.32ID:koZ0sZlBM
>>696
冗長とか増長とか言う前にシートを指定せずにcells( )とか使うのはバグの元、せめて
With Worksheets("sheet2")
.Range(.Cells(1, 1), .Cells(UBound(tmp), UBound(tmp, 2))) = tmp
End With
にした方がいい
2020/10/28(水) 19:02:36.90ID:SBFJNMXDM
withはなんか嫌い
2020/10/28(水) 19:10:52.23ID:URI3IFfrM
DAIGO監修マッチングアプリ
720デフォルトの名無しさん (ワッチョイ 93e6-rMvQ)
垢版 |
2020/10/28(水) 19:13:48.38ID:Aw3ALjki0
..でもうひとつ上のwithが使えるとか変な拡張してほしい
2020/10/28(水) 19:29:16.70ID:n4xiXKpa0
>>717
With ThisWorkbook.Worksheets("sheet2")
.Cells(1, 1).Resize(UBound(tmp), UBound(tmp, 2))) = tmp
End With
おれはブックから指定しないと気が済まんな
2020/10/28(水) 19:32:00.41ID:XiKqUxDYM
withはなんか嫌い
2020/10/28(水) 19:40:24.53ID:8aJXN6gS0
Sheetオブジェクトにbookから指定したシート格納して扱うことが多いかなー
724デフォルトの名無しさん (ワッチョイ 93e6-rMvQ)
垢版 |
2020/10/28(水) 19:43:09.41ID:Aw3ALjki0
SetしたらNothing警察がウルサイんだよ
2020/10/28(水) 19:44:40.32ID:n4xiXKpa0
Withじゃないと他人がつけたSheetやRangeの変数名を把握するの大変じゃない?
2020/10/28(水) 19:49:35.60ID:HcvuYFHJd
>>696
???
worksheets("sheet2").usedrange.value= tmp
じゃ駄目なのか?

範囲の文字が欲しいなら
worksheets("sheet2").usedrange.address
とかでも駄目?
2020/10/29(木) 12:00:49.68ID:xpkBYj/E0
>>726
sheet1と2じゃUsedRangeの範囲が違うだろ
sheet1の範囲取得しないと
2020/10/29(木) 12:27:28.32ID:wp9TtuK3d
>>727
意味が分かった。
ならアドレスでOK。
アドレス違うなら関数作れ。
入ってる二次元配列がどんなであろうと貼り付け先1セル指定で貼り付く奴。
2020/10/29(木) 18:28:14.85ID:2VkEHk3qa
背中にお婆さんがはり付いているよ
2020/10/29(木) 21:30:53.07ID:4HKKGi1r0
vba配列操作貧弱すぎてつらい
2020/10/30(金) 14:29:28.42ID:mCzxAGXk0
ならVBAやめなよ
■ このスレッドは過去ログ倉庫に格納されています