1 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 02:23:41.78 ID:2t63WK/jM.net] !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑2行に減ってるけど、同じ内容を3行に増やして貼り付けること ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 ※前スレ Excel VBA 質問スレ Part75 https://mevius.5ch.net/test/read.cgi/tech/1644384272/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
152 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:07:42.32 ID:vMDI6+gYM.net] >>149 使いたくて見つけられないのは馬鹿だと思うよ?
153 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:09:21.29 ID:7ynD7rzD0.net] ニッチな動画すぎるわ こういうのはたまに腕前を見せる程度でいいと思うぞ
154 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:34:55.10 ID:Dykg0reN0.net] エクセル動画って意外と伸びないんだよ 再生数あげてる動画も、数年かけてやっとこさ5桁とかそんなん
155 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 22:12:27.54 ID:jYa2tCV10.net] 文字には勝てんよwww
156 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 00:43:35.28 ID:tFOC1nFU0.net] YouTubeでしょ? Excel動画の一部で100万回とか200万回再生動画あるけど、あれは例外かな? 配信者が人気度高いとか?
157 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 01:12:54.43 ID:FuQQRFwo0.net] ぶっちゃけいちいち動画にするのやめてくれとしか思わんな テキストに書いてくれと
158 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 07:53:33.56 ID:QJ4+3poJ0.net] それは見なきゃいいだけじゃね
159 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 08:06:57.86 ID:UbenPHXM0.net] >>156 ?
160 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 08:54:23.72 ID:ZErRlfK3d.net] たいがいのことは検索すればブログと動画と両方出てくる 好きな方を見ろとしか
161 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 09:03:39.72 ID:9Ja/LFqb0.net] >>153 文字だとさ、その分の数行を細切れに書くやつがいてさ、 その分だけ見せられても困る事が多い。 解説書気取りなんだろうけど。 VBAならいいけど、pythonとかだと全体が見れないとな。
162 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 12:06:30.15 ID:zgbylN/DM.net] >>159 ドーガってソース全体見せながら饅頭が喋るの?
163 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 13:24:13.30 ID:yO41HbkGd.net] 64bitだとdatepickerが使えないんだけど代替有りますか?
164 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 22:05:53.36 ID:UbenPHXM0.net] >>161 無いんだな、これが あと64bitじゃなくて2013か2016あたりから使えないはず
165 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 00:44:38.46 ID:VeiX84dqd.net] クリップボードに あああ いいい 123 たたたた ららら 12ああ 000 1 かかか あかさ たなは 358 22558 のようにランダムな文字列や数字がはいっています。 空白や改行の数もランダムですがどちらも5個いないです。 あああ、や、いいい、の間は空白や改行のどちらかです。 文字列または数字を、空白か改行で区切って 横に10列ずつに並べたいです。 A1に「かかか」B1に「いいい」おなじように繰り返してJ1に「あかさ」、次はA2に「たなは」が入るようなイメージです。 うまく伝わっているかわかりませんが、どのようなコードを書いたらいいですか?
166 名前:デフォルトの名無しさん [2022/05/22(日) 02:13:20.90 ID:EshCCJ/od.net] >>163 まずはちゃんと伝えるように書け
167 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 02:46:34.46 ID:EqID4SVmM.net] >>163 よくわからん部分もあるが クリップボードからテキストフォーマットのデータをstrに読み込んで改行ごとに分割(spritかね) 分割した文字列を更にスペースごとに分割して2次元配列にいれる あとはそれをセルに転写すればいいんじゃないの? 分けるのが改行と空白両方ならどっちかにリプレースしてからスプリット
168 名前:デフォルトの名無しさん (アウアウウー Sac7-xdJx) mailto:sage [2022/05/22(日) 06:43:53 ID:e+a5DD9Ja.net] >>163 とりあえずその状態で欲しい結果を書け
169 名前:デフォルトの名無しさん (ワッチョイ 9768-A7oz) mailto:sage [2022/05/22(日) 06:45:54 ID:g+ilDpCn0.net] >>163 連続する改行と空白を消す。 for i = 1 to 5 a = Replace(a, vbCrLf & vbCrLf, "") a = Replace(a, " " & ” ” , "") next 改行を空白に置換する splitで分ける 配列をセルに入れる
170 名前:デフォルトの名無しさん (ワッチョイ 9768-A7oz) mailto:sage [2022/05/22(日) 06:46:20 ID:g+ilDpCn0.net] >>166 A1に「かかか」B1に「いいい」おなじように繰り返してJ1に「あかさ」、次はA2に「たなは」が入るようなイメージで
171 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 08:05:25.80 ID:kuwcJLnp0.net] どういう順番にしたらA1にかかかが来るのかがよく分からない
172 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 08:09:48.09 ID:g+ilDpCn0.net] A1に「かかか」 ↓ A1に「あああ」 間違えてるだけだろ、それぐらい見抜こう
173 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 08:43:32.82 ID:kuwcJLnp0.net] 書かれてる仕様を思い込みで勝手に書き換えたらいかんでしょ 作り込む前に確認を取らなきゃダメだよ
174 名前:デフォルトの名無しさん (アウアウウー Sac7-xdJx) mailto:sage [2022/05/22(日) 09:43:55 ID:aVdyttIba.net] >>168 Dim S As String With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .GetFromClipboard S = .GetText End With With CreateObject("VBScript.RegExp") .Pattern = "[ \n]+" .Global = True Dim R As Long R = 1 Dim C As Long C = 1 Dim T As Variant For Each T In Split(.Replace(S, " "), " ") Cells(R, C).Value = T C = C + 1 If 10 < C Then C = 1 R = R + 1 End If Next End With
175 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 10:01:24.95 ID:q4bvZkadM.net] >>172 あらキレイ
176 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 10:11:15.36 ID:RbyXtd/h0.net] >>173 綺麗に見えるだろ? このコード、死んでるんだぜ…ヘヘッ
177 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 10:37:59.11 ID:TDPiVbwY0.net] >>163 VBAスレでいうのもアレだと思うけど 「改行、スペースで区切られたテキストデータを、10個ずつ(10列ずつ)で改行されるデータとして抽出したい」 って考えると正規表現可能なテキストエディタでやったほうが良いような気がする。 ( | |\r\n) を \t \t+ を \t ((.*?\t){2}) を $1\r\n にみたいな感じで
178 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 13:05:55.15 ID:QBTEeDJr0.net] >>163 同じくVBAスレでいうのもアレだし>>172 でよいと思うけど powershell -c "(gcb -raw) -replace '\s+', """"`t"""" -replace '((?:[^\t]+\t){9}[^\t]+)(?:\t|$)', """"`$1`r`n""""|scb" VBAから実行するなりバッチファイル(.bat)にして実行するなりすると 整形結果がクリップボードに入るのでA1を選択して貼り付け。 すでにExcel上にあるデータなら>>172 とかが有力だけど、 入力元がクリップボードならクリップボード格納前後(VBA前)で テキスト処理に向いた言語や手法(>>175 )で整形したらいいんじゃないの、と思う。 餅は餅屋、ってことで。 今回だとクリップボード操作と正規表現向き内容なのでPowerShellが向いてそう。 ・実行環境のOS(Windows 7で実行されうるか) ・文字列にダブルクォーテーションが含まれうるか ・「空白」の正確な定義(レアな空白を「空白」に含んでよいか) ・『A1に「かかか」』の謎 ・この整形処理前後の処理(処理全体、本当の処理目的) などにもよるけど。
179 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:14:42.01 ID:Np0e+b7dd.net] 常にそうだとは言わないけど、VBAでいろんなことしようとする人って 会社内でセキュリティに縛られてVBAしか使えないような環境でこっそりやってる場合が多いんじゃね うちなんてpowershellさえ使えない
180 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 21:09:09.39 ID:2g8+RnwC0.net] >>177 VBAとVBScript/Jscriptはそれの定番だよ。 IEがなくなるとスクレイピングができなくなるよな。 そういう環境下だと、どうするんだろう。
181 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 21:19:32.54 ID:uG5Z2bGad.net] 163です。 レスくださった方ありがとうございました。 結論から言うと、>>172 を加工してなんとなくうまくできました。 A1セルは「あああ」が正しいです。すみません。
182 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 21:33:47.57 ID:g+ilDpCn0.net] それぐらい分かってるから大丈夫だ
183 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 17:38:33.02 ID:KrqlZBhkM.net] 表示するのにラグを発生させたい場合sleepかウェイトを試して見たのですがソースの途中に入れても実行最初に止まって全部表示されてしまうのですがなにかいい方法はないのでしょうか
184 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 17:51:32.07 ID:KArKRscP0.net] 何の表示だよ
185 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 17:58:05.38 ID:KrqlZBhkM.net] セルに挿入です for文を挟んでいるとどうもすべて止まって一括表示されてしまいます
186 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 18:38:04.00 ID:nw7KfNpjD.net] ループ内で都度再表示させればいいんじゃねーの
187 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 18:45:16.94 ID:S7FOVsdv0.net] excelのシートのA列に◎オプションボタンActiveXを付けた、B列には商品名(3000件くらいある)を入れた。 ◎ りんご ◎ みかん ◎ ぶどう ◎ ばなな ぶどうを選んだら、TRUEになった番号は「3番」って返ってきているのですが、3000件を設定するのが大変で一括で設定できる方法があれば何かヒントを教えてください。
188 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 20:02:47.45 ID:BtAHO3WV0.net] >>181 なんのためのラグかを書けばもう少しマシなやり方を教えてくれるかも
189 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 20:48:26.86 ID:e/WRg45j0.net] >>183 DoEvents
190 名前:デフォルトの名無しさん (ワッチョイ 9768-A7oz) mailto:sage [2022/05/23(月) 20:58:57 ID:BtAHO3WV0.net] Sub foo() Range("a1:z100").Formula = "=rand()" End Sub こういうのを徐々に表示したいってなら、無理だ
191 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 21:43:20.23 ID:2/Utrmz50.net] Do Eventsってイマイチちゃんと意味を理解しない状態で使ってる気がする なんか図形でアニメみたいな動きさせるとか 入れると安定したり
192 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 23:30:03.20 ID:e/WRg45j0.net] >>189 WindowsというOSの(ほぼ)すべてがイベントで動いてる キー入力も画面表示もディスクアクセスも、何をするにもイベントが必ず使われる 普通に使ってるだけで、ユーザーの関知してないところで毎秒数十万回以上のイベントが発生してて、その一部は溜めたり無視することもできる そこで溜まったイベントをまとめて処理するのがDoEvents
193 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 23:44:03.30 ID:lhQpV8J50.net] 肥溜めの水で流すボタンだな
194 名前:デフォルトの名無しさん (スップ Sdba-LYQt) [2022/05/23(月) 23:54:22 ID:hvqO78Q3d.net] >>190 中途半端な知識の人の回答だな 所詮はExcel使いか
195 名前:デフォルトの名無しさん (ワッチョイ abda-ZFfB) mailto:sage [2022/05/24(火) 00:04:30 ID:voOeNnQV0.net] そうか?
196 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 01:52:28.78 ID:KUFh4POM0.net] ググって読んでもさっぱりわからんがプロシージャの共通化(´・ω・`)これかも。
197 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 02:50:59.45 ID:iiO+sB1VM.net] >>190 ExcelのVBAがWindowsの全てのイベントを処理しているとでも思ってんの? いつの時代のWindowsだよ
198 名前:デフォルトの名無しさん (ワッチョイ 372f-tVBN) [2022/05/24(火) 06:09:04 ID:VAh5gH+20.net] >>195 話せ。
199 名前:デフォルトの名無しさん (ワッチョイ 0eda-yjPv) [2022/05/24(火) 06:13:25 ID:3Lu4tPby0.net] タスク
200 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 13:00:25.03 ID:voOeNnQV0.net] 60歳70歳の古参プログラマーじゃないんだからさ
201 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 21:38:10.53 ID:ylp1zOdx0.net] Loop中など他からの割り込みの余地入れる=DoEventsかと思ってました 厳密な意味は知らずに使ってました
202 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 22:07:09.92 ID:kwRZndg1d.net] 昔はWindowsのイベントループそのものだったけど、今は>>199 くらいの認識の方が正しいよ 今のExcelは裏でスレッド使いまくってるから複雑
203 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 22:24:18.97 ID:L7ubAEHL0.net] 少しまだ難しいですが、とりあえずはwindowsの処理で無視していた分を一旦返してあげるみたいな処理なのだと認識しました。
204 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 22:30:40.02 ID:1UrgJSe10.net] 昔はシングルコアで激重だったから適度に返さないとすぐに応答なしになった 今はマルチタスクで割と重い処理も平気
205 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 05:02:47.05 ID:1b7KkSYk0.net] 個人用マクロブックのプロシージャからシートに挿入されているマクロのボタンを押す方法を教えて下さい
206 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 06:07:16.42 ID:BON/kfv30.net] privateを削除するんじゃなくて? 物理的にクリック?
207 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 06:43:21.13 ID:1b7KkSYk0.net] 物理的にではなくシート側のボタンのクリックイベントのプロシージャを個人用マクロブックのプロシージャから動かしたいです。
208 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 06:45:16.14 ID:1b7KkSYk0.net] application.runは駄目でした
209 名前:デフォルトの名無しさん [2022/05/25(水) 06:47:11.61 ID:Vyx13HCI0.net] イベントとか言うから初心者が勘違いする
210 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 07:53:58.12 ID:SJVW4y9pr.net] プロシージャの中身を外出ししようとか考えたのか?
211 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 08:31:27.12 ID:2Cw1QSym0.net] >>203 Call
212 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 09:47:51.39 ID:rgUSKbgWd.net] いやここはレイズだ
213 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 18:45:23.11 ID:cRKMftFU0.net] >>206 呼び出し先のブック名は入れてるのかもしれないけどモジュールが複数あってモジュール名は入れてない、とか?
214 名前:デフォルトの名無しさん (ワッチョイ 3336-4kT2) mailto:sage [2022/05/25(水) 19:54:25 ID:ZQqE1PHN0.net] 説明が少なくて申し訳ありません。 マクロボタンのついた会社の帳票のマクロボタンを押して処理をした上に自分の個人用マクロブックの処理がしたいです。私は会社の帳票のマクロを変更する技術も権限もないのでこのような形を取っています
215 名前:デフォルトの名無しさん (アウアウウー Sac7-yjPv) [2022/05/25(水) 20:09:39 ID:ySKajOtFa.net] やっちゃいけないことじゃねーの
216 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 20:44:02.25 ID:rgUSKbgWd.net] 会社のマクロにパスワードが掛かってる、かつ起点となるマクロはその会社の方のマクロって事かな? 1. 会社のExcelと個人で用意したxlsm(個人用ブックである必要無し)を準備する 2. vbs やps1の外部ファイルから会社のVBA実行→個人で用意したxlsm内のVBA実行 これで行けるんでねえの?
217 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 20:52:50.14 ID:D9uW2fk+0.net] 変更する技術がないなら触らない方が良いと思うよ
218 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 21:08:25.40 ID:UbZSbjiw0.net] そもそも権限のないものを突破しようってのは倫理的にどうなのって気がするが まずは上司なりなんなりに相談するところからじゃね
219 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 21:14:00.59 ID:oImj9UUVM.net] ややこことは辞めたほうがいいね
220 名前:デフォルトの名無しさん mailto:sage [2022/05/25(水) 22:29:41.62 ID:BtdSsAyL0.net] パスワードかかってるマクロなんて適当な野良アプリでわかるけどな
221 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 00:34:12.72 ID:O+gRo7JH0.net] 会社用のマクロ実行したあと、個人用マクロを実行するだけの作業なのに あくまでも自分の分からない領域まで手を入れたいってのは分からんな マクロ壊して分かりづらい変なトラブルになったら責任云々とかになりかねないかもしれんぞ 214のやり方がむりなら諦めるか上長に相談するべきやと思うで
222 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 06:53:49.33 ID:FGzk4ul90.net] >>219 100個ぐらいあるエクセルファイルを開いて、そのエクセルファイルのマクロボタンを押して一回目の処理をして次に個人用マクロブックに作った処理をしてエクセルファイルを上書き保存して閉じるを繰り返さなくてはいけないのでマクロ化したいのです。エクセルファイル側のプロシージャを個人用マクロブック側に持たせるのが一番簡単かなと
223 名前:デフォルトの名無しさん [2022/05/26(木) 06:58:26.73 ID:5W+gZAxj0.net] その会社の帳票マクロとやらのファイルを開いてボタン押せるんならSendKeys使えば何とかなるんじゃねーの?(鼻ホジ)
224 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 07:56:10.65 ID:JEeygHRrr.net] >>220 工夫するのは上長に100個もある無駄なExcelファイルについて改善を提案すべきじゃね 下手なやつの自動化は害にしかならない それでだめなら自分の責任でこういうやり方していいかとか聞くとかそういう流れにはもうしたんやろ? 外部から呼ぶ214のやり方で無理なら諦めろ 改善して見込める君の給与メリットがそれほどの額じゃないんやろ これ公務員とかならマジで税金の無駄やなw
225 名前:デフォルトの名無しさん (ワッチョイ 7fce-eugl) mailto:sage [2022/05/26(木) 08:40:43 ID:MTu1kK/A0.net] 公務員なんて文系の仕事だから、効率のいいデータ整理やプログラミングができるやつなんてほぼいない しかし理系の人材に役所仕事させるのは税金の浪費以上にもったいない
226 名前:デフォルトの名無しさん (ワッチョイ 8a3d-Td31) mailto:sage [2022/05/26(木) 14:50:09 ID:6r93DwI70.net] >>206 wshでしょっちゅうやってるけど Set fso = Wscript.CreateObject("Scripting.FileSystemObject") CurrentDirectory = fso.getParentFolderName(WScript.ScriptFullName) Set ExApp = Wscript.CreateObject("Excel.Application") ExApp.Visible = True 'エクセル可視/不可視設定 ExApp.DisplayAlerts = False '警告メッセージをオフ Set Wb = ExApp.Workbooks.Open(fso.BuildPath(CurrentDirectory,"Book1.xlsm")) ExApp.Application.Run "Macro1"
227 名前:デフォルトの名無しさん [2022/05/26(木) 15:48:41.66 ID:5fQbWZ9ra.net] 上司に黙ってデータ改竄とかしたら 会社の資産を横領できちまうな
228 名前:デフォルトの名無しさん [2022/05/26(木) 18:34:16.06 ID:MJ/jCOeZ0.net] 農協で30年勤めたOLがやりそうなイメージ。
229 名前:デフォルトの名無しさん [2022/05/26(木) 18:36:23.42 ID:MJ/jCOeZ0.net] 郵便局の場合、昭和のころから歴代の局長が引き継いでそう。 漁協の場合、いくつもの窃盗グループがありそう。 悪いこととは知らなかったって言いそう。
230 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 22:05:05.56 ID:KppvSZ/JH.net] 今日いちにち会社で配列に関する記事を読んでましたがここ10年くらいVBAに触れてなかったせいもあり よく理解できないためお力をお借りしたいです。 20万行くらいある空白の無いデータを処理したいのですが、私の書いたコードではどうしても速く処理できません。 F列が「Distribution (PCW; Sales value」とあったらその右のG列の数字を見に行き、3以下ならその行含め下に2行、合計3行削除したいです。 Sub TEST1() Application.ScreenUpdating = False Dim A 'セルの値を配列に格納 A = ActiveSheet.Range("A1").CurrentRegion '配列をループ For i = UBound(A, 1) To 2 Step -1 '「If」で検索 If A(i, 6) = "Distribution (PCW; Sales value)" Then If A(i, 7) <= 3 Then Cells(i, 1).Resize(3, 1).EntireRow.Delete Shift:=xlUp End If End If Next End Sub
231 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 22:19:00.22 ID:KppvSZ/JH.net] 一応こんな感じのデータです A列 B列 C列 D列 E列 F列 G列 CTM_ 12Area TM_2022 sku SKU Code Measure TOTAL 4.18- 4.25- 5.2- 5.9- 業態合算 Hokkaido その他 キヨウリツ ゼリ- 4901325124326 Distribution (PCW; Sales value) 8.64 7.03 6.63 9.19 11.70 業態合算 Hokkaido その他 キヨウリツ ゼリ- 4901325124326 Sales Store**** 2,386. 1,830 3,254. 2,244 2,460.5 業態合算 Hokkaido その他 キヨウリツ ゼリ- 4901325124326 Sales Store***** 666 7777 888 4444 7777
232 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 22:19:48.67 ID:KppvSZ/JH.net] やっぱりずれた。。。(>_<)
233 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 22:28:17.29 ID:dA4WjGxV0.net] >>228 Excelの行を1行1行Deleteするのはどうやっても重くなるから出力用の配列を作るのがいいかな
234 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 22:30:55.09 ID:6l5xx5Q8d.net] 配列を使ってんなら配列の中で削除処理しないとそりゃあ意味無いでしょ
235 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 22:46:06.64 ID:KppvSZ/JH.net] >>231 >>232 ごもっとです、、(;^_^A 今日は疲れたので明日ちょっと調べて試行錯誤してみます。レスいただきありがとうございました。
236 名前:デフォルトの名無しさん [2022/05/26(木) 23:00:25.66 ID:Wrt5fLCv0.net] いつもやる方法があるけどどのくらい早いのかはよくわからん
237 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 23:01:04.69 ID:6l5xx5Q8d.net] ユニークなキー列がもしあればディクショナリー使うのが速いよ まあ難しければ配列でも全然良いけど
238 名前:デフォルトの名無しさん (HK 0Hca-ib4B) mailto:sage [2022/05/26(木) 23:26:48 ID:KppvSZ/JH.net] >>234 少なくとも私のコードよりは速いんじゃないかな。。 15万行を10分以上かかってます(;^_^A >>235 ディクショナリーとは初めて聞きました。でもユニークなキーがありませんでした。。 SKU Codeという商品コードは基本ユニークなんですが3行ずつ同じ商品コードが並んでるんです。。(;^_^A
239 名前:デフォルトの名無しさん (ワッチョイ 768c-aDUG) [2022/05/26(木) 23:42:29 ID:Wrt5fLCv0.net] >>236 じゃあこんな感じで作ったので10分以上がどのくらい早くなったか遅くなったか教えてください。 Sub TEST1() Application.ScreenUpdating = False Dim A 'セルの値を配列に格納 A = ActiveSheet.Range("A1").CurrentRegion '配列をループ For i = UBound(A, 1) To 2 Step -1 Debug.Print i '「If」で検索 If A(i, 6) = "Distribution (PCW; Sales value)" Then If A(i, 7) <= 3 Then Cells(i, 6).Resize(3, 1).Interior.Color = RGB(255, 0, 0) End If End If Next ' ActiveSheet.Range("A1").CurrentRegion.Select Selection.AutoFilter Field:=6, Criteria1:=RGB(255, 0, 0), Operator:=xlFilterCellColor Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select Selection.SpecialCells(xlCellTypeVisible).Select Application.ScreenUpdating = True Selection.Delete 'これはしないで目で確認して手動でDELETEしても良いかも End Sub
240 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 23:50:53.02 ID:HeWhwrio0.net] >>228 ・最初にセルの内容をvariantの2次元配列に格納。 ・そのvariantを弄くり倒す。 ・ほしい結果になったvariantを最後に書き戻す。 セルはフォントだの背景色だの罫線だの表上のアドレスだのとにかくいろんな
241 名前:情報がてんこ盛りなので、valueみてりゃいい処理ならできるだけ書き換えない。 [] [ここ壊れてます]
242 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 00:18:49.05 ID:JbgC4v+W0.net] あと、蛇足なんだけどソースでやってることそのものをコメントで書いてもあまり意味が…。 '配列をループ For i = UBound(A, 1) To 2 Step -1 とか '「If」で検索 If A(i, 6) = "Distribution (PCW; Sales value)" Then は、いらないのではと。 もひとつ、削除系処理は下からループさせたほうが無難な気がしないでもない。
243 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 00:19:25.67 ID:JbgC4v+W0.net] あ。ループは俺の読み間違いだ。ごめんなさない。
244 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 00:22:08.18 ID:5SJXPRgg0.net] >>235 Dictionary使うならユニークなキーがなくても行番号をキーに突っ込めば大体応用効くよね アイテムはArrayで格納すればいいし
245 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 00:30:45.85 ID:5SJXPRgg0.net] ちなみに行削除は、DeleteTargetRowみたいなRange型の変数を使って、削除対象の行が出たらその変数にUnionしていってまとめて削除、がまだ速いかな
246 名前:デフォルトの名無しさん [2022/05/27(金) 01:16:57.81 ID:+979Xq8C0.net] >>237 自分で15万行のデータで試したらDebug.Print i を外しても遅すぎたので作り直し うちでは5秒でした (Core2Duo E7500 RAM8G win10 Excel2010) 元データのF列に色がないことが条件ですけどね Sub TEST1() Dim startTime As Double: startTime = Timer Application.ScreenUpdating = False Dim A A = ActiveSheet.Range("A1").CurrentRegion For i = UBound(A, 1) To 2 Step -1 If A(i, 6) = "Distribution (PCW; Sales value)" Then If A(i, 7) <= 3 Then Cells(i, 6).Resize(3, 1).Interior.Color = RGB(255, 0, 0) End If End If Next ' Application.ScreenUpdating = True Dim mySheet As Worksheet: Set mySheet = ActiveSheet Dim tempSheet As Worksheet: Set tempSheet = Worksheets.Add Dim myRange As Range: Set myRange = mySheet.Range("A1").CurrentRegion myRange.AutoFilter Field:=6, Operator:=xlFilterNoFill myRange.Offset(1, 0).Resize(myRange.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy tempSheet.Range("A1") mySheet.ShowAllData myRange.Clear tempSheet.Range("A1").CurrentRegion.Copy mySheet.Range("A1") Application.DisplayAlerts = False tempSheet.Delete Application.DisplayAlerts = True MsgBox (Timer - startTime & "秒でした") End Sub
247 名前:デフォルトの名無しさん [2022/05/27(金) 02:06:50.25 ID:+979Xq8C0.net] myRange.Offset(1, 0).Resize(myRange.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy tempSheet.Range("A1") を下に修正 myRange.SpecialCells(xlCellTypeVisible).Copy tempSheet.Range("A1")
248 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 06:53:03.71 ID:0WSlRFUXd.net] >>241 お何か良いアイデアかも 横からだけど使わせて貰おう
249 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 06:53:21.55 ID:XEPyrX550.net] >>237 おそら>>243 さんもそうかな? あの後寝てしまい申し訳ありません。 8時くらいになるかと思いますが動かしてみますのでお待ちくださいm(__)m 夜遅くまでどうもありがとうございます!(´;ω;`) >>238 スミマセン、・そのvariantを弄くり倒す。 からもうよくわからないレベルです。。でもありがとうございます。 >>239 基本はネットで拾ったコードを貼っているので、、 でも自分の参考にはなってます笑。 ありがとうございます。 >>241-242 ちょっと時間あるときに勉強してみますね(;^_^A
250 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 07:26:42.06 ID:XEPyrX550.net] >>243 えっ!!何が起こったの? こっちも5秒で終わりましたっっ!!!えええぇ信じられないスゴイスゴイ!!!(笑) ちょっと後でゆっくりF8で動かしてみようと思います!!! 本当に助かりました!ありがとうございました!!! (´;ω;`)
251 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 07:28:44.47 ID:XEPyrX550.net] >>244 見落としてましたスミマセン。修正してなくてもめちゃくちゃ速く動きましたが こちらも動かしてみますね。ありがとうございました!m(__)m
252 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 08:09:16.73 ID:XEPyrX550.net] >>244 のは見出しが消えるのを修正したコードでしたね(;^_^A あと、会社のPCで動かしてみたら2秒もかかりませんでした。 素晴らしいコード、本当にありがとうございましたm(__)m 配列の勉強したいと思います。