1 名前:デフォルトの名無しさん [2020/06/26(金) 02:01:29.56 ID:uDfmpksE0.net] !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
153 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 00:14:47.41 ID:P5PHrlsB0.net] >>151 一休さんかコロンブスみたいな回答で良いなら出来る。 実際に全角文字や絵文字で書いてみな。
154 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 04:04:14.78 ID:B7qpVotz0.net] Function 〓(ByRef a, ByVal b) : a = b : End Function Function ┼(ByVal b, ByVal c) : 〓 ┼, WorksheetFunction.Sum(b, c) :End Function これを入れておけば、=とか+から解放されるぞ Sub test() Dim a 〓 a, 1 Debug.Print ┼(a, 1) End Sub
155 名前:デフォルトの名無しさん (ワッチョイ 0a2f-+ZV3) mailto:sage [2020/07/03(金) 12:58:30 ID:KESc8IU30.net] そんなソース絶対読みたくないな 読みやすいフォント探すか自作すればいいだけだろうに
156 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:30:11.45 ID:hUamHkOVa.net] ハズキルーペ使えよw
157 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 21:14:38.38 ID:mplhmvvw0.net] ワークシートの条件にあう行を削除して上に詰めるみたいなことを、配列内でしたいです。 多次元配列"ary"内の1列目が66か、6列が1000か、28列目が空欄のレコードを削除するコードを教えてください
158 名前:デフォルトの名無しさん [2020/07/03(金) 21:23:34.89 ID:Mxid+JS90.net] E列が空白になるまでE列とG〜M列に特定の処理をしたくて Do loopを使って何とかできないかと悩んでたけど座礁しますた Eの11行目を起点にして E列の数値が正の数ならEもG〜Mも数値はそのまま E列の数値が0ならEもG〜Mも数値はそのまま Eの数値が負の数ならEとG〜Mの数値を-*1 と反転させたい ってのは素人には荷が重すぎですかね?
159 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 21:31:07.37 ID:DQKehNsV0.net] 157,188 お互いに相手のコード相談しながら考えてあげればいいんじゃね ちょうどよさげだわレベル
160 名前:デフォルトの名無しさん (ワッチョイ 27ce-BXkI) mailto:sage [2020/07/03(金) 21:44:24 ID:4NyCV/dB0.net] >>158 いいえ、がんばればできます
161 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 21:55:13.66 ID:4NyCV/dB0.net] Sub Macro1() r = 11 '起点の行 Do While Cells(r, "E") <> "" If Cells(r, "E") < 0 Then Cells(r, "E") = -Cells(r, "E") For c = Asc("G") To Asc("M") Cells(r, Ch r(c)) = -Cells(r, Ch r(c)) Next c End If r = r + 1 Loop End Sub
162 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 22:17:41.55 ID:aUU6z7Ir0.net] そもそもマクロ作るのって違うデータでも同じ処理をやりたいような場合じゃないのか 一回限りのデータ抽出ならわざわざマクロなんか作る意味ないんだけどな 無駄に時間を浪費したいのかな
163 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 22:37:42.83 ID:qSqs6yG50.net] 使い捨てマクロってのもありまして
164 名前:デフォルトの名無しさん (ワッチョイ 6bda-ewff) mailto:sage [2020/07/03(金) 22:48:22 ID:3J4wGhdX0.net] 定型フォーマットの複数ファイルの同項目の値を集計したい なんて時は使い捨てマクロかな
165 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 23:04:06.95 ID:KESc8IU30.net] >>157 VBAの配列に要素詰める命令はなかったはずなので、どうしてもというなら 該当要素より下の要素を一つずつ上にずらす 最後の要素を消す とやればできなくはないがお勧めはしかねる
166 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 23:06:05.89 ID:KESc8IU30.net] >>158 それVBAじゃなくても計算式とワークの列使えばできると思うけど なぜ素人がVBAでやろうと思うんだ
167 名前:デフォルトの名無しさん [2020/07/03(金) 23:26:37.07 ID:Mxid+JS90.net] >>161 構文エラーでしたわ >>166 VBAでやりたかったのです…
168 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 23:27:55.78 ID:8QUz9sdRa.net] 確かに一回限りの作業なら マクロ考えているよりやった方が終わってるかもな
169 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 23:35:20.76 ID:P5PHrlsB0.net] >>157 配列内でやるならレコードセットだな。
170 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 23:42:57.67 ID:9EQo/V7m0.net] 一回きりだろうと同じ処理100回やるようなのもあるんだし
171 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 23:46:08.59 ID:P5PHrlsB0.net] 1回限りでも3行くらいで済むのは書くな。
172 名前:デフォルトの名無しさん (ワッチョイ bb1d-+upQ) [2020/07/04(土) 00:48:12 ID:KIBH4SNT0.net] まだ22歳の学生社長が得た、23億円の「使い道」 あの橋本環奈をCMに使うバイトアプリの雄 https://toyokeizai.net/articles/-/319511 中学時代の車いす生活から、17歳で起業するまで https://www.advertimes.com/20200130/article306925/ ミャンマー発 AIダイニングアプリ「Yathar」をしかける日本人起業家 https://roboteer-tokyo.com/archives/14840 自分の視野は「世の中の0.001%」と自覚せよ。ビジネスチャンスを掴む4つの習慣 https://headlines.yahoo.co.jp/hl?a=20200511-00010001-srnijugo-life アプリの視聴率がわかる 高専卒起業家の独創力 https://www.nikkei.com/article/DGXMZO46695580Y9A620C1000000/ 1万人の若者を支援!インターンが日本を変えるかも!? glowshipの若き創業者・足立卓也氏インタビュー https://sogyotecho.jp/glowship-adachi-interview/ 大学生起業家が設立1年で20億円調達! 単発バイトアプリに外食企業など出資【タイミー】 https://foodfun.jp/archives/3490
173 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 01:40:09.94 ID:IOVEPry/0.net] 一般論としては頻度の多い作業の方が自動化に向いてるのは確かだけど、 1回だけでも大量のデータを加工したり手作業でやるには時間のかかる作業もあり、 作業時間の方がコード書く時間より長くなる場合も多々もあるのでケースバイケースやね
174 名前:デフォルトの名無しさん (ワッチョイ 5301-JCxG) [2020/07/04(土) 01:58:21 ID:42LT/T3f0.net] 逆に、山田やっとけ、というのはどうよ?
175 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 02:07:27.87 ID:VMWug14q0.net] やるとは何を?
176 名前:デフォルトの名無しさん [2020/07/04(土) 02:09:15.54 ID:42LT/T3f0.net] データの加工。
177 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 02:10:42.23 ID:VMWug14q0.net] 加工すればいいんじゃね
178 名前:デフォルトの名無しさん [2020/07/04(土) 02:13:10.44 ID:42LT/T3f0.net] いや、山田がやってくれないかなって。 だめ?
179 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 02:16:03.66 ID:VMWug14q0.net] だから山田がデータを加工すればいいんじゃね
180 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 02:38:36.13 ID:VMWug14q0.net] 素人にやらせた場合間違った結果を出すかもしれんが その場合頼んだ側にも責任があるけどそれでも山田にやらせるか?
181 名前:デフォルトの名無しさん [2020/07/04(土) 03:10:27.15 ID:42LT/T3f0.net] 田中のほうが良いかな?
182 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 03:37:53.50 ID:OxpkXjjxa.net] 斎藤さんだぞ
183 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 04:04:04.69 ID:IjVZd7O90.net] 山田ができるのは座布団運びだけだろ
184 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 07:02:36.51 ID:VZt6Ms3K0.net] do whileとかほとんど使わないわ あれ試行錯誤してる最中に脱出条件間違えて固まるとイライラってするんで >>158 こういうのは 途中で空白行挟んでたらどうすんのとか考えるとEnd(xlup)とか使って無難にforで回したい 最も空白行挟んでたらそこまでしか処理しないのかもしれんけど それなら上から順に一旦回して空白行がどこに出るのか調べてからやるわ 全データ配列に格納してからやれば速度的にも問題ないと思うし
185 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 07:59:26.14 ID:yagtSNgld.net] 観測地点が全国で2000ヶ所、1時間毎の観測結果3年分のデータがあって、8時間毎に観測出来なかった場合も踏まえて平均し、観測出来なかったのが8時間の内4時間以上あったら平均値も出力出来なかったとする。 で、その8時間の平均値は1時間ずつずれて24個分で1日のデ―タとなるんだが、それをさらに平均して1日の値とする なんてのやったが1回限りでもVBA使わないと無理。 というか普通に考えてVBAでも無理だけどね。
186 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 09:41:06.65 ID:htrp3xgD0.net] >>157 配列に入れたら順番に書き込んで条件の時だけ書き込みスキップじゃ駄目なの?
187 名前:デフォルトの名無しさん (ワッチョイ 1e8e-0gyK) [2020/07/04(土) 10:01:18 ID:1naoKVTK0.net] >>185 お前の低い知能の頭ではできないだけだろ
188 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:47:27.20 ID:VZt6Ms3K0.net] 簡単だよな セルにどういう風にデータが並んでるかで多少の工夫がいるかもしれんけど 加減乗除のみのワンパターン
189 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:11:54.32 ID:xB5SKVkx0.net] 水口克也氏のExcelVBA入門講座って本を使ったことある人いますか? 最後のじゃんけんゲームを作る所が、どうしてもうまくいきません
190 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:23:35.41 ID:KlM0EefbM.net] >>185 作業シート使ってExcelだけでできるんじゃね? そもそも移動平均の平均とかあまり意味ないことやってる方が気になるけど
191 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 12:37:06.40 ID:/jHrZd8o0.net] 8時間平均から24時間平均への変換は一般的なLPF処理だな デジタル信号処理で数値データを扱う基本的な考え方だよ
192 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:05:03.59 ID:VZt6Ms3K0.net] >>157 全要素forで回しながら 条件合うものだけを新しい配列newArrayにいれていけばいいじゃん その後新しい配列から、データ空にしたシートに記入 新しい配列の要素数、特に1次元要素数(行数)だけど Redim Preserveで順次増やしていくのはこの場合できないから、 一旦行数を確定するためだけにfor回してカウント 要素数確定したnewArray作ってから もう一度for回して入れていけばいい 行列逆転させればredim preserve使って一発でもいけるか 特に巨大なデータでなければ間違い避けるために二回まわすなおれなら 行削除によって表自体の体裁を上に詰めていきたいっていうなら 最初にforを回した後、元の行数とnewArrayの行数の差だけ表の行を削除 データはすでに配列にとってあるんだからどこから削除しても構わない
193 名前:デフォルトの名無しさん (ワッチョイ 8a01-21HI) mailto:sage [2020/07/04(土) 13:32:13 ID:IjVZd7O90.net] >>191 それ一気に24時間平均でよくね?
194 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 13:43:57.26 ID:/jHrZd8o0.net] いきなりデータ粒度を荒くするのは悪手 ましてや>>185 の場合はじめに欠損データのノイズキャンセルも行っているのでまとめて行なうとデータの精度が低下する
195 名前:デフォルトの名無しさん (アウアウエー Sa82-h0J+) mailto:sage [2020/07/04(土) 14:05:30 ID:Em2AcreDa.net] 24コマを1コマにするんだから 平らに均すのに精度もクソも無い気がする
196 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:21:18.07 ID:/jHrZd8o0.net] データ値の定常状態と過渡状態を理解していれば分かる 粒度が荒いと応答性が悪化するので現象の追従が遅れる 安定時のデータ値だけならともかくデータの変化を取りこぼすリスクが高くなるんだよ
197 名前:デフォルトの名無しさん (アウアウエー Sa82-h0J+) mailto:sage [2020/07/04(土) 14:31:13 ID:Em2AcreDa.net] >>196 そりはモニタのアッパーとローワーにトリガー仕込んだら良い話ではないのでしゅか?
198 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:44:04.22 ID:/jHrZd8o0.net] 上限、下限決め打ちの場合はトリガ仕込むのでも通用はする ただ一日当たりの変化量でアクション起こす場合はどうする? 移動差分(微分)を連続的にデータ処理しないと難しい
199 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:48:04.16 ID:ZiXQ0AsVa.net] 喧嘩はやめよう
200 名前:157 mailto:sage [2020/07/04(土) 14:58:18.35 ID:oup49XFx0.net] >>186 仮の配列を作り、編集してaryに入れるようにしたいのですが これだと、全て空欄になってしまいます Dim i As Long, j As Long, cnt As Long, cnt2 As Long i = Cells(Rows.Count, 1).End(xlUp).Row '仮の配列 ReDim Kariary(i, 30) As Variant Kariary = Range("A2:AD" & i).Value '最終的に代入する配列 ReDim ary(i - 1, 30) As Variant For cnt = 1 To i - 1 If Not Kariary(cnt, 1) = 66 Or _ Kariary(cnt, 6) = 1000 Or _ Kariary(cnt, 28) = "" Then j = UBound(ary) + 1 If j < i - 1 Then For cnt2 = 1 To 30 ReDim Preserve ary(j, 30) As Variant ary(j, cnt2) = Kariary(cnt, cnt2) Next cnt2 End If End If Next cnt 'シートを一旦クリア Cells.Clear Range("A2:AD" & i) = ary
201 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:04:44.69 ID:xhESn47nr.net] はい
202 名前:デフォルトの名無しさん (アウアウエー Sa82-h0J+) [2020/07/04(土) 15:22:36 ID:ZKMg5qK7a.net] >>198 地デジのようなリアルタイムデコードじゃなくて 過去に既に起こってしまったデータ欠損の過ちをVBA で穴埋めしようとしたたところで土台遅いと言う話でした。 >>199 そうですね
203 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:31:40.93 ID:VZt6Ms3K0.net] >>200 頭が痛くなってくるんだけど まずifの条件がおかしい 自分で簡単の作って確かめてみ こういうの 思ってるような動きするか確かめてみ プログラムってのはそういうことしないとだめだわ まっさらなxlsm作ってデータも簡単のシートに作ってやってみ そうすりゃすぐ分かる Sub teeee() With ActiveSheet If Not .Cells(1, 1) = 66 Or .Cells(2, 1) = 2 Then MsgBox "ok" End If End With End Sub 例えばさ、 ary(j, cnt2) = Kariary(cnt, cnt2) これにブレークポイントつけてここに到達するケースがあるか調べてみ それだけで何か分かるわ まぁだれか正解のコード書いちゃうんだろうけど デバッグ ブレークポイント これ使えないとまともなコード書けないぞ
204 名前:デフォルトの名無しさん (ワッチョイ 8a01-5cl0) mailto:sage [2020/07/04(土) 15:38:09 ID:VZt6Ms3K0.net] それだけじゃないからな redim preserve は、くせ者
205 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:42:33.80 ID:RSp2d2NT0.net] redimしなくても十分な量確保しといてどこまで使ったか変数に入れときゃいいだけだろ わざわざ負荷かかることする意味がない
206 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:56:38.11 ID:D9As6lACa.net] プロはとりあえず配列に格納するのが好きなんです
207 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:03:39.61 ID:DEQjmcqBd.net] >>187 >>190 やって見てから言えよw 問題は時間だ。 2000x365x24x3=52560000 100列で50万行だぞ。 実際やったわけだが、普通にやって6時間とかかかる感じだった。 勿論、初心者じゃないから2次元配列使うのも当然やってる。 まあ、6時間もかけたく無かったからマルチプロセスにして1時間ぐらいにしたけどな。
208 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:04:11.08 ID:qCMIttGKd.net] 十分な量を確保 あとで失敗するパターン
209 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:09:00.53 ID:MUUOvXMba.net] data.csv 年月日,時間,気温,湿度 2020/07/04,11:15,28.5℃,78% 2020/07/04,12:15,ー,78% 2020/07/04,13:15,28.5℃,ー 2020/07/04,14:15,ー,ー 2020/07/04,15:15,28.5℃,78% ・・・ ・・ ・ 1カ月データとして24時間×31日=744行+先頭行 1年12ヶ月データで8,928行かぁ データスルーとかデータ穴埋めとかって どっちの場合も VBA じゃなくてデータベースのSQLで出来たりするのかな?
210 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:22:41.23 ID:DNEaiqy30.net] おれならそもそも案件をRDBMSに移す提案をするわ だめなら元データはどうせCSVやJsonかなにかだろうし、VBAから普通にRDBにいれてプロシージャ叩くとか 外部プログラムで直に処理するね 元データがExcelでExcel縛りなら、どうやって案件から手を引くかを考えるねw Excel起動するVBAでやることじゃない まあ金次第でもあるけど
211 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:30:22.62 ID:DEQjmcqBd.net] >>209 う〜ん、場所毎だから表になるっちゃあなるけど、SQLでやろうとは思わなかったし、どうやってやるのかも思い付かんわ。 仕事でSQLばかり触ってるが。 >>210 おう、確かに元データはCSVだった。 SQLで上手いことやるのが思い付かんが。
212 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:35:45.74 ID:qCMIttGKd.net] pythonでデータクリーニングさせれば?
213 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:42:21.08 ID:IjVZd7O90.net] >>196 > 安定時のデータ値だけならともかくデータの変化を取りこぼすリスクが高くなるんだよ 平均とってる時点で取りこぼしとか意味不明なんだけどw
214 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:47:20.12 ID:IjVZd7O90.net] >>207 2000列で高々3万行程度だろ Excelの計算式はマルチスレッドで動くから自称「初心者じゃない」君のVBAより速いと思うぞ
215 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 17:02:54.82 ID:DEQjmcqBd.net] >>214 バーカw やってから言え。 本当バカだなあ。 そもそもファイル重くて碌に動かねえよ。
216 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 17:18:55.42 ID:pfDbF4Mra.net] どうせ適当なデータでっち上げて表示させても気づかないだろ
217 名前:200 mailto:sage [2020/07/04(土) 17:35:53.50 ID:oup49XFx0.net] >>203 おっしゃる通りでした。 IFに問題があったみたいです。ありがとうございました。
218 名前:デフォルトの名無しさん (ワッチョイ 8e02-JJ0U) mailto:sage [2020/07/04(土) 17:46:55 ID:aRnpDm0b0.net] 5ちゃんのExcelVBA質問スレでMonaさんに対してマウントを取りたいのですが、 Mount Mona と記述してもマウントが取れません どうすればいいですか?
219 名前:デフォルトの名無しさん [2020/07/04(土) 17:49:24.23 ID:1naoKVTK0.net] >>207 お前が馬鹿なだけだろ 全部メモリーに置く理由もない 己の頭の問題を仕様の問題とすり替えるな
220 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 17:54:43.71 ID:oup49XFx0.net] A列の2行目以降に値あり、B列の2行目以降に同じ行のA列の値が 上から何回目に出現したかを返す関数として「=COUNTIF($A$1:A2,A2」を使っています。 同じことを配列で使用する方法を教えて下さい。 (A列の値は並び替えをしてあります) Dim EndRow As Long, r As Long EndRow = Cells(Rows.Count, 1).End(xlUp).Row ReDim ary(EndRow, 2) ary = Range("A2:B" & EndRow).Value For r = 1 To EndRow - 1 ary(r, 2) = Application.WorksheetFunction.CountIf _ (Range(ary(1, 1), ary(r, 1)), ary(r, 1)) Next r これだとRangeメソッドは失敗しましたになります。
221 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 18:14:15.70 ID:DEQjmcqBd.net] >>219 出来もしないこと言ってるバカ? それとも、それ迄のやり取りすら出来ないバカ? 手作業やExcel数式でやってから言え。 ちゃんとそれ迄のやり取りも読んでから言えよw
222 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 19:58:17.09 ID:VZt6Ms3K0.net] >>185 批判したいとかそういうもんじゃないんだけど わりと大きなデータ扱うことに興味があったんでどんなもんか実際やってみた 1カ所分しかやってないんだけど csvから取得して平均値26280個をシート記入するまで1秒もかかってない感じ 一日ごとの平均は出してないけどこの分じゃそれほど差はないと思う もしや取得時には配列で一括取得してても シート記入時に配列使った一括記入してないんじゃ? も少し情報提供すると https://www.data.jma.go.jp/gmd/risk/obsdl/index.php# ここから3年分時間別気温データを、1年ごとcsvにして三個ダウンロード https://www.moug.net/tech/exvba/0060086.html これと同じ感じでOpen使って取得 年ごとに必要な気温データのみ1次元配列に入れる 3つの配列を1つの配列にまとめる 平均値入れていく配列AveArrayを新しく作る(あえてString宣言) あとはforで回しながら過去8時間分のデータを調べてデータない場合の個数を調べて 4つ以上ならAveArrayにN/Aを入れる 4つ未満なら8時間合計して、有効データ数で除算し、AveArrayに入れる AveArrayを列数1の2次元配列にしてからシートに一括記入 なんかおれ間違ってる?
223 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 20:07:02.00 ID:ZiXQ0AsVa.net] こうやって実際にやってみる人は素晴らしいと思う
224 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 20:15:53.04 ID:/OqMGH1W0.net] >>220 matchならともかくcountifは配列に対応してない 素直にセルを引数にしてやったほうがいいのでは
225 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 20:17:12.12 ID:JHoncA5/a.net] countifじゃなくてloopでfindにすればよいのでは
226 名前:デフォルトの名無しさん (ワッチョイ 87da-VQSO) mailto:sage [2020/07/04(土) 22:27:57 ID:VMWug14q0.net] VBAは手段の一つ、目的はデータの加工ってわりきればすぐ終わる作業なのに 無理してVBAだけでやろうとするからいつまでもおわらない
227 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 23:58:08.33 ID:DEQjmcqBd.net] >>222 ちょっと見た感じほぼ、俺と同じ感じだね。 >もしや取得時には配列で一括取得してても シート記入時に配列使った一括記入してないんじゃ? オイオイ、そんな素人なわけ無いだろ。 Line inputを使ったか、それより速いバイナリ読み込み+StrConv使ったかについては覚えて居ない。 まあ、速いといっても劇的に速くなる訳じゃないから、そんなことよりマルチプロセスってことでLine inputのままだったかも。 オレがやった時のデータは日付+24列のデータだった。 貼り付けは元データ込みで、元データの右に8時間平均と1日平均書いたと思うが、もしかしたら8時間平均は出力しなかったかも。 多分読み込みよりも列を増やした二次元配列にして書き込みにも利用してたと思う。
228 名前:デフォルトの名無しさん (スップ Sd4a-aBdg) mailto:sage [2020/07/05(日) 00:48:44 ID:poq4gvQsd.net] 複数のファイルの名前を編集したい 具体的には、全てのファイルのファイル名に、2020と入れたい。
229 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 00:51:15.79 ID:C4Jqu0Op0.net] DOSコマンドでできる
230 名前:デフォルトの名無しさん (ワッチョイ 27ce-BXkI) mailto:sage [2020/07/05(日) 01:49:00 ID:UMxIfgnY0.net] >>228 ファイル名のどこに入れるの?先頭?真ん中?末尾?
231 名前:デフォルトの名無しさん [2020/07/05(日) 01:59:51.75 ID:S3+IlzuQ0.net] >>230 その程度vbaなら自由自在でしょ バカにしないでください
232 名前:デフォルトの名無しさん [2020/07/05(日) 02:04:39.40 ID:sCEs+yW00.net] >>227 お前の書き込みは、 「というか普通に考えてVBAでも無理だけどね。」 だろ 後付けで時間がとか言い出して誤魔化すんじゃねーよ
233 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 03:08:45.12 ID:EDU6Wt820.net] powershellでやれ
234 名前:デフォルトの名無しさん (ワッチョイ 8a01-c9XW) [2020/07/05(日) 07:10:34 ID:Mq9FuBzw0.net] 標準モジュールに、 Sub 1() ・・・ ・・・ End Sub Sub 2() ・・・ ・・・ End Sub Sub 3() ・・・ ・・・ End Sub と、書いていき、Sub 1()がSub 2()を呼び、Sub 2()がSub 3()を呼ぶ、って可能でしょうか?
235 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:16:23.84 ID:2yUokYO9d.net] >>232 ??? 日本語が理解出来ないのか? >なんてのやったが1回限りでもVBA使わないと無理。 「やった」と書いて有るだろ。 その後に「普通に考えて」とも書いてる。 実際にやったが、普通はVBAでも無理という意味だよ。 >>222 とほぼ同じで6時間かかるからマルチプロセスにしたんだからな。
236 名前:デフォルトの名無しさん (ワッチョイ 8a01-5cl0) mailto:sage [2020/07/05(日) 07:44:05 ID:VaIdJVAp0.net] >>227 せっかくなんで csvは日付+24列に加工してみた 1カ所の8時間ごと平均データ26280個を作って1列に貼り付けるfunctionを作る 引数は貼り付け先の列の列番号 これを ?1回だけ実行 A列のみに貼り付け ?100回実行 A列から右100列に1列ごと貼り付け ?200回実行 A列から右200列に1列ごと貼り付け timer付けて一応測ってみた ?0.31秒 ?32秒 ?67秒 2000回だと12分ぐらいか? CPU i5-4670 メモリ 24GB Win7 実行時はPCでテレビ見ながらJane2個起動 firefox、Janetterなど20個以上のアプリが動いてる 環境やらデータの数値の大きさやらで 差は2000倍に拡大する可能性があるんで何とも言えない うちの職場のしょぼいPCでやったらもっと酷いと思う
237 名前:234 (ワッチョイ 8a01-c9XW) [2020/07/05(日) 07:54:44 ID:Mq9FuBzw0.net] >>234 をグーグルで検索するには、どういうキーワードで検索すればいいでしょうか?
238 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:57:11.74 ID:R1IME3L+0.net] >>228 Ruby で作った。 ただし、DryRun なので実際には実行されません! require 'fileutils' # 絶対パスのディレクトリ名の後ろに、* を付けること! # . で始まる、隠し directory, file を除く glob_pattern = "C:/Users/Owner/Documents/*" src_dir = File.dirname( glob_pattern ) # ディレクトリパスだけを取り出す Dir.glob( glob_pattern ) .select { |full_path| File.file?( full_path ) } # ファイルのみ処理する .each do |full_path| # 1つずつ処理する dest_path = src_dir + "/" + "2020_" + File.basename( full_path ) # ファイル名 FileUtils::DryRun.move( full_path, dest_path ) end # mv C:/Users/Owner/Documents/a.txt # C:/Users/Owner/Documents/2020_a.txt
239 名前:234 [2020/07/05(日) 08:01:08.68 ID:Mq9FuBzw0.net] >>228 ファイルをバイナリで読み込んで、バイナリで書き出す、 で、書き出す際に、ファイル名に"2020"&、とすればいい。
240 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 08:01:41.62 ID:VaIdJVAp0.net] >>234 うん >>237 vba 関数 呼び出し 偉いね、その姿勢があればすぐにプロフェッショナルだわ
241 名前:デフォルトの名無しさん [2020/07/05(日) 08:04:40.53 ID:nDNnOTMWa.net] >>234 普通に最後にサブルーチンの名前呼び出し書いたら良いのでは? Sub 1() ・・・ ・・・ 2 End Sub Sub 2() ・・・ ・・・ 3 End Sub Sub 3() ・・・ ・・・ End Sub
242 名前:234 [2020/07/05(日) 08:05:40.42 ID:Mq9FuBzw0.net] >>240 どうもです。
243 名前:234 [2020/07/05(日) 08:06:29.51 ID:Mq9FuBzw0.net] >>241 どうもです。
244 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:36:58.35 ID:CJtrxhlB0.net] >>242 呼び出しは、可読性考慮すると文頭にCall書いた方がいいよ
245 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:58:43.83 ID:U1BgWcwt0.net] >>207 VBAでやっても6時間はかかりすぎな気がするが マシンスペックとコード晒してみ それ、計算式でやって再計算に1時間以上かかるのか? 当然試してるよな マルチプロセスもどうやってやったのか気になるが 俺なら間違いなくDBにつっこんでSQLでやる そういえばエクセルシートなりCSVなりに対してSQL投げる方法がいくつかあったけど それは試したのか?
246 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:07:25.29 ID:2yUokYO9d.net] >>239 ファイル名変更だから読む必要は無いだろ。 変更するだけでOK。
247 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:11:46.86 ID:BTTSshKd0.net] >>244 おれもsubモジュール呼び出しはCallつけるようにしてる 他の言語いじったにあととかにVBAのその行みたらよくファッ!?って一瞬なるから
248 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:16:11.04 ID:2yUokYO9d.net] >>245 SQLに投げるのは簡単だが、今回の問題でどういうSQLで出来るのかが分からんかった。 今でも思い付かんが。 計算式ではやってないな。 まあ、無駄なんで。 というか、本当にやる奴が出るとは思わんかったから、言わんかったが他にも制約は有ったんだわ。 それにしても>>236 は速いな。 ちょっとおれも調べてみるか。 ちなみにこの仕事数年前なんで完全に憶えてるわけじゃない。
249 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:22:54.54 ID:2yUokYO9d.net] マルチプロセスはExcel.Application8個(自分含めて)呼び出して、自分のブック開いて別CPUにやらせるプロシージャをApplication.OnTimeで呼び出したかSetTimerで呼び出したかだったんじゃないかな。 細かい連携しないで済むようにしてたと思う。 複雑なことはやってねえよ。
250 名前:220 (ワッチョイ 87cc-ERT+) mailto:sage [2020/07/05(日) 19:59:50 ID:Y6miK3VP0.net] >>224 いろいろ試してダメだったらそうします >>225 ありがとうございます。そうします
251 名前:デフォルトの名無しさん (スプッッ Sd4a-tYaB) mailto:sage [2020/07/05(日) 21:27:28 ID:2yUokYO9d.net] >>236 う〜ん、分からん。 俺もやってみたんだが、同じような時間だった。 観測値はテキ卜一に0〜100をランダムで書き込み。 観測出来なかった値は当時の記憶を頼りに9999とした。 確か9998もあったけど変わらんだろう。 前に書いた制約というかは、1年分のファイルが50〜60個ぐらいだったということ。 つまり県ごとのファイルで観測地が多い所は複数ファイルって感じ。 だから実際は行頭に観測地名が入って、その後に何かの数値とかが幾つかあって日付、観測値という具合だった。 年ごとのファイルが完全に固定フォーマットで無かったか、俺が信用してなかったか、観測値名で検索してたと思う。 そこから365日分は連続してたと思うけど。 それでも6時間は掛からんような気がしてきた。 もっと複雑なことやってたのかなあ。 どっちにしても後だしで申し訳ない。
252 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 22:26:04.09 ID:ys79fvH60.net] >>251 そもそもいつ頃の話よ うろ覚えだけど2010あたりから計算式はめちゃめちゃ速くなってるぞ あとでかいブックは64bit化の恩恵もあるし
253 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 22:29:31.22 ID:2yUokYO9d.net] >>252 調べたらそんなに昔じゃ無かったな。 2016年だった。