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/06/30(火) 22:01:34.74ID:3GBrKjbXa
>>105
1と2で同じ操作をやりたいなら、別プロシージャに切り分けて(関数化)それをそれぞれに処理する方がわかりやすい
2020/06/30(火) 22:14:31.69ID:x94da/wE0
>>105
keydownイベントで上下の時になんやかんやする
2020/06/30(火) 22:19:33.56ID:x94da/wE0
操作に関わらず一緒でいいならchangeイベントで楽に済ませられるが…
2020/06/30(火) 22:39:03.05ID:ulIgP7Tu0
Sub 四捨五入()
Dim PP As Range
Dim SELU As Range Set PP = Selection.EntireRow Set PP = Intersect(PP, Range("G:AE")) If WorksheetFunction.Count(PP) = 0 Then Exit Sub Set PP = PP.SpecialCells(xlCellTypeConstants, xlNumbers) For Each SELU In PP SELU = Round(SELU, 2) SELU.NumberFormatLocal = "0.00;-0.00;0" Next SELU End Sub

昨日の俺です
こんな感じで四捨五入をしてる
やはり記録するかコピーしといて間違えたら戻す作戦かなあ
2020/06/30(火) 22:56:39.68ID:RrxBtxCBr
A列とB列にXYデータが書かれているファイルがある

このファイルが複数あり、データを縦にくっつけてひとつのファイルにする方法をお願い致します。
111デフォルトの名無しさん (ドコグロ MMc3-qQym)
垢版 |
2020/06/30(火) 23:33:01.16ID:ayj87xxdM
>>110
「vba 別のブック間 コピー」でググればそれなりの答えのサイトは出てくるよ
2020/07/01(水) 16:24:36.34ID:/ZTplk5x0
グラフの列の範囲を1つ進めて、範囲が変わったグラフを眺めてまた次の範囲を選択するマクロにしたいのですが、うまくいきません。
sleepで5秒待機するループにすると、マクロが終わるまでグラフはそのままです。
何か良い方法はありますか?
2020/07/01(水) 16:38:43.05ID:ufrQ+5Zi0
新しい表示にしてから待機したらいいんでないの
2020/07/01(水) 17:00:30.01ID:JVz0cdM50
DoEvents
2020/07/01(水) 17:01:38.04ID:wdJg4V2k0
眺め終わったら自分でボタン押す仕様にすればいい
2020/07/01(水) 18:02:59.35ID:cdm/n45Wa
眺めるってw
2020/07/01(水) 18:14:23.56ID:BGy1oUher
A列に上から1万個くらいのデータがある。

ある値以下なら行全体削除、上詰めにするマクロをお願い致します。


ググってもまとをえたのがなく困ってます。
2020/07/01(水) 18:21:37.82ID:ufrQ+5Zi0
>>117
作業列作ってある値以下なら1立てる→1でオートフィルタ→行削除
2020/07/01(水) 18:24:14.85ID:g4YauoQu0
>>117
どうせ暇なんだろ、1万くらい手作業でやれよ
2020/07/01(水) 18:24:43.29ID:v2a99oiHF
>>117
範囲をテーブルにする
条件に当てはまる行のa列から、データの入ってる最終列までClearContents
で、テーブルをある列基準に並び替え
2020/07/01(水) 18:34:27.89ID:5XfsDMDI0
wordをcomで操作しているんですが、基本的にcomは
同期処理できないんですか?
たとえば、よくあるprintout(wordVBAの)〜Set wordApp = Nothing
の流れなんかは、Application.Waitを入れないと印刷される前に
終わってしまいます。
122デフォルトの名無しさん (ワッチョイ 1e61-LTdq)
垢版 |
2020/07/01(水) 18:38:53.74ID:34UZRJ820
>>117
dim r as long
dim was as excel.worksheet
set we=activesheet
Do while r>0
if ws.cells(r,”A”)<ある値 then
ws.rows(r).delete shift:=xlup
else
r=r-1
end if
loop
パフォーマンスは知らん
2020/07/01(水) 19:21:24.82ID:g4YauoQu0
そして動かないとか言ってくる初心者
2020/07/01(水) 19:44:41.54ID:l3YNJLMh0
deleteは重いわ誤作動起こしやすいわいいことないよな
2020/07/01(水) 19:59:04.37ID:fKGbFrld0
誤作動なんて起こすの?
単にセル番号計算ミスしたスクリプト書くだけなら理解できるけど、誤作動なんてあったら使えないな
2020/07/01(水) 20:06:30.76ID:Tir3cVcXa
フィルターかけてカレントリージョンでコピーして新規シートに貼り付けが良さそう
127デフォルトの名無しさん (ドコグロ MMc2-4eOZ)
垢版 |
2020/07/01(水) 21:01:32.84ID:v34eJavmM
>>122
(r,”A”)<ある値
顔文字に見えたわw
128デフォルトの名無しさん (ワッチョイ 1eae-M/Ft)
垢版 |
2020/07/01(水) 21:43:01.53ID:H9TCgnXe0
Webで見たぐらいの初心者なのですが
書式設定の複数1行列を色変える作業が
200回ほどやらなきゃいけなく
マクロ組んでみようかと頑張ったのですが
上手くいきません

Dim a As Integer
Dim row1 As Integer
row1 = 3
For a = 0 To 200
Columns("row1 + a , P + a").Select
Selection.Format Conditions.以下略
Selection.Format Conditions以下略
With Selection.略
Selection略
Selection略
Selection略
End With
Next a

row1を無くしてb=3
これをColumnsをRange(b+a,b+a)
で出来ますでしょうか?
Rangeの指定カッコ内では数式を入れられないとかありますか?
129デフォルトの名無しさん (ワッチョイ 1eae-M/Ft)
垢版 |
2020/07/01(水) 22:17:29.48ID:H9TCgnXe0
Range(cells(a,1),cells(a,16)).Select
でやってみます
2020/07/01(水) 22:45:11.71ID:xxJ42X4qa
何故初心者はSelectしたがるのか
2020/07/01(水) 23:36:22.71ID:yn1qRX7nM
>>35
>>130
マクロの記録がその手のコードを生成するからでしょ
2020/07/02(木) 01:40:39.72ID:Y/spJvDG0
条件付き書式とかは?
2020/07/02(木) 02:34:51.75ID:G8g1bCvWr
このメニューで、空白セルにチェック入れると空白セルを選択しますね。

では例えば値が100以上など、条件つきのセルを選ぶ事はできますか?

https://i.imgur.com/zyDAZ0X.jpg
2020/07/02(木) 04:05:38.32ID:vmiMC9VK0
教えてください。
imagemsoの名称からfaceidに変換することは可能でしょうか?
もしくはmsoBarPopupでimagemsoを使用することは可能でしょうか?
2020/07/02(木) 06:28:30.74ID:PEAIWqln0
>>133
選んだセルをどうしたいかによるけど、オートフィルかけて選択とか
2020/07/02(木) 08:20:19.52ID:yX39WODNa
他人の作ったコードはなぜ読む気がしないのか
2020/07/02(木) 10:30:47.89ID:KAImZ3Owa
読む必要はないからな
138デフォルトの名無しさん (ワッチョイ 1e8e-0gyK)
垢版 |
2020/07/02(木) 12:31:17.08ID:cWLbwDw40
馬鹿の特徴

「教えて」「助けて」

で始まる書き込みをする
2020/07/02(木) 13:06:37.09ID:vmiMC9VK0
>>138
馬鹿でもいいです。
じゃあ、模範的な質問の仕方を教えてください。
2020/07/02(木) 15:30:35.30ID:NxUusdo6a
そんなものはない
2020/07/02(木) 16:07:39.62ID:fLeksvw30
>>140
ありがとうごさいました。参考になります。
2020/07/02(木) 16:13:40.59ID:pSHiLlcA0
馬鹿の特徴

人にマウントしたがるだけで
質問への答えは出さない
2020/07/02(木) 17:04:38.40ID:2Xt/GnSW0
>>142
馬鹿でもいいです。
じゃあ、模範的な回答の仕方を教えてください。
2020/07/02(木) 17:44:48.44ID:Q59tEF0c0
そんなものはない
2020/07/02(木) 17:45:12.17ID:q3lU8bAMa
そんなひとはいない
2020/07/02(木) 21:22:15.18ID:sbstkRF+M
馬鹿には馬鹿と指摘しないと、あまりに低レベルの自分でやってみようという意志もない馬鹿な質問で溢れかえるからこれくらいでいい
2020/07/02(木) 21:49:51.56ID:2Xt/GnSW0
>>144
ありがとうございました。参考になります。

>>145
消えろ
2020/07/02(木) 22:51:02.52ID:7/3Aifl90
ここが上級者ばかり集う高尚なスレだと思っているのかWWWWWWWWWWWW
VBAごときでWWWWWWWWWw
2020/07/02(木) 23:33:21.68ID:0km7hKfU0
VBAを随分下に見てるねえ。
別にC#で回答してもいいよ?
VBAに脳内変換するから。
2020/07/02(木) 23:47:09.16ID:Y/spJvDG0
上級者も馬鹿も両方いてあたりまえ
お前らそんなにマウントとりたいのかw
151デフォルトの名無しさん (ワッチョイ bb80-Rur7)
垢版 |
2020/07/02(木) 23:59:32.57ID:yXnL3NZ/0
誰か教えて。
式に=とか+を使うと字が読みにくくて困っています。
全角文字や絵文字を使うことはできないのでしょうか?
急いでいますからすぐに教えて、
152 テトリス ◆SYKnw8OJpw
垢版 |
2020/07/03(金) 00:10:57.30
テスト
2020/07/03(金) 00:14:47.41ID:P5PHrlsB0
>>151
一休さんかコロンブスみたいな回答で良いなら出来る。
実際に全角文字や絵文字で書いてみな。
2020/07/03(金) 04:04:14.78ID:B7qpVotz0
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
2020/07/03(金) 12:58:30.06ID:KESc8IU30
そんなソース絶対読みたくないな

読みやすいフォント探すか自作すればいいだけだろうに
2020/07/03(金) 13:30:11.45ID:hUamHkOVa
ハズキルーペ使えよw
2020/07/03(金) 21:14:38.38ID:mplhmvvw0
ワークシートの条件にあう行を削除して上に詰めるみたいなことを、配列内でしたいです。

多次元配列"ary"内の1列目が66か、6列が1000か、28列目が空欄のレコードを削除するコードを教えてください
158デフォルトの名無しさん (ワッチョイ 8ab5-5DWS)
垢版 |
2020/07/03(金) 21:23:34.89ID:Mxid+JS90
E列が空白になるまでE列とG〜M列に特定の処理をしたくて
Do loopを使って何とかできないかと悩んでたけど座礁しますた

Eの11行目を起点にして
E列の数値が正の数ならEもG〜Mも数値はそのまま
E列の数値が0ならEもG〜Mも数値はそのまま
Eの数値が負の数ならEとG〜Mの数値を-*1
と反転させたい
ってのは素人には荷が重すぎですかね?
2020/07/03(金) 21:31:07.37ID:DQKehNsV0
157,188
お互いに相手のコード相談しながら考えてあげればいいんじゃね
ちょうどよさげだわレベル
2020/07/03(金) 21:44:24.02ID:4NyCV/dB0
>>158
いいえ、がんばればできます
2020/07/03(金) 21:55:13.66ID:4NyCV/dB0
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
2020/07/03(金) 22:17:41.55ID:aUU6z7Ir0
そもそもマクロ作るのって違うデータでも同じ処理をやりたいような場合じゃないのか
一回限りのデータ抽出ならわざわざマクロなんか作る意味ないんだけどな
無駄に時間を浪費したいのかな
2020/07/03(金) 22:37:42.83ID:qSqs6yG50
使い捨てマクロってのもありまして
2020/07/03(金) 22:48:22.59ID:3J4wGhdX0
定型フォーマットの複数ファイルの同項目の値を集計したい
なんて時は使い捨てマクロかな
2020/07/03(金) 23:04:06.95ID:KESc8IU30
>>157
VBAの配列に要素詰める命令はなかったはずなので、どうしてもというなら
 該当要素より下の要素を一つずつ上にずらす
 最後の要素を消す
とやればできなくはないがお勧めはしかねる
2020/07/03(金) 23:06:05.89ID:KESc8IU30
>>158
それVBAじゃなくても計算式とワークの列使えばできると思うけど
なぜ素人がVBAでやろうと思うんだ
167デフォルトの名無しさん (ワッチョイ 8ab5-5DWS)
垢版 |
2020/07/03(金) 23:26:37.07ID:Mxid+JS90
>>161
構文エラーでしたわ
>>166
VBAでやりたかったのです…
2020/07/03(金) 23:27:55.78ID:8QUz9sdRa
確かに一回限りの作業なら
マクロ考えているよりやった方が終わってるかもな
2020/07/03(金) 23:35:20.76ID:P5PHrlsB0
>>157
配列内でやるならレコードセットだな。
2020/07/03(金) 23:42:57.67ID:9EQo/V7m0
一回きりだろうと同じ処理100回やるようなのもあるんだし
2020/07/03(金) 23:46:08.59ID:P5PHrlsB0
1回限りでも3行くらいで済むのは書くな。
172デフォルトの名無しさん (ワッチョイ bb1d-+upQ)
垢版 |
2020/07/04(土) 00:48:12.93ID:KIBH4SNT0
まだ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
2020/07/04(土) 01:40:09.94ID:IOVEPry/0
一般論としては頻度の多い作業の方が自動化に向いてるのは確かだけど、
1回だけでも大量のデータを加工したり手作業でやるには時間のかかる作業もあり、
作業時間の方がコード書く時間より長くなる場合も多々もあるのでケースバイケースやね
174デフォルトの名無しさん (ワッチョイ 5301-JCxG)
垢版 |
2020/07/04(土) 01:58:21.07ID:42LT/T3f0
逆に、山田やっとけ、というのはどうよ?
2020/07/04(土) 02:07:27.87ID:VMWug14q0
やるとは何を?
176デフォルトの名無しさん (ワッチョイ 5301-JCxG)
垢版 |
2020/07/04(土) 02:09:15.54ID:42LT/T3f0
データの加工。
2020/07/04(土) 02:10:42.23ID:VMWug14q0
加工すればいいんじゃね
178デフォルトの名無しさん (ワッチョイ 5301-JCxG)
垢版 |
2020/07/04(土) 02:13:10.44ID:42LT/T3f0
いや、山田がやってくれないかなって。
だめ?
2020/07/04(土) 02:16:03.66ID:VMWug14q0
だから山田がデータを加工すればいいんじゃね
2020/07/04(土) 02:38:36.13ID:VMWug14q0
素人にやらせた場合間違った結果を出すかもしれんが
その場合頼んだ側にも責任があるけどそれでも山田にやらせるか?
181デフォルトの名無しさん (ワッチョイ 5301-JCxG)
垢版 |
2020/07/04(土) 03:10:27.15ID:42LT/T3f0
田中のほうが良いかな?
2020/07/04(土) 03:37:53.50ID:OxpkXjjxa
斎藤さんだぞ
2020/07/04(土) 04:04:04.69ID:IjVZd7O90
山田ができるのは座布団運びだけだろ
2020/07/04(土) 07:02:36.51ID:VZt6Ms3K0
do whileとかほとんど使わないわ
あれ試行錯誤してる最中に脱出条件間違えて固まるとイライラってするんで

>>158こういうのは
途中で空白行挟んでたらどうすんのとか考えるとEnd(xlup)とか使って無難にforで回したい
最も空白行挟んでたらそこまでしか処理しないのかもしれんけど
それなら上から順に一旦回して空白行がどこに出るのか調べてからやるわ
全データ配列に格納してからやれば速度的にも問題ないと思うし
2020/07/04(土) 07:59:26.14ID:yagtSNgld
観測地点が全国で2000ヶ所、1時間毎の観測結果3年分のデータがあって、8時間毎に観測出来なかった場合も踏まえて平均し、観測出来なかったのが8時間の内4時間以上あったら平均値も出力出来なかったとする。
で、その8時間の平均値は1時間ずつずれて24個分で1日のデ―タとなるんだが、それをさらに平均して1日の値とする

なんてのやったが1回限りでもVBA使わないと無理。
というか普通に考えてVBAでも無理だけどね。
2020/07/04(土) 09:41:06.65ID:htrp3xgD0
>>157
配列に入れたら順番に書き込んで条件の時だけ書き込みスキップじゃ駄目なの?
187デフォルトの名無しさん (ワッチョイ 1e8e-0gyK)
垢版 |
2020/07/04(土) 10:01:18.86ID:1naoKVTK0
>>185
お前の低い知能の頭ではできないだけだろ
2020/07/04(土) 11:47:27.20ID:VZt6Ms3K0
簡単だよな
セルにどういう風にデータが並んでるかで多少の工夫がいるかもしれんけど
加減乗除のみのワンパターン
2020/07/04(土) 12:11:54.32ID:xB5SKVkx0
水口克也氏のExcelVBA入門講座って本を使ったことある人いますか?
最後のじゃんけんゲームを作る所が、どうしてもうまくいきません
2020/07/04(土) 12:23:35.41ID:KlM0EefbM
>>185
作業シート使ってExcelだけでできるんじゃね?
そもそも移動平均の平均とかあまり意味ないことやってる方が気になるけど
2020/07/04(土) 12:37:06.40ID:/jHrZd8o0
8時間平均から24時間平均への変換は一般的なLPF処理だな
デジタル信号処理で数値データを扱う基本的な考え方だよ
2020/07/04(土) 13:05:03.59ID:VZt6Ms3K0
>>157
全要素forで回しながら
条件合うものだけを新しい配列newArrayにいれていけばいいじゃん
その後新しい配列から、データ空にしたシートに記入

新しい配列の要素数、特に1次元要素数(行数)だけど
Redim Preserveで順次増やしていくのはこの場合できないから、
一旦行数を確定するためだけにfor回してカウント
要素数確定したnewArray作ってから
もう一度for回して入れていけばいい

行列逆転させればredim preserve使って一発でもいけるか
特に巨大なデータでなければ間違い避けるために二回まわすなおれなら

行削除によって表自体の体裁を上に詰めていきたいっていうなら
最初にforを回した後、元の行数とnewArrayの行数の差だけ表の行を削除
データはすでに配列にとってあるんだからどこから削除しても構わない
2020/07/04(土) 13:32:13.54ID:IjVZd7O90
>>191
それ一気に24時間平均でよくね?
2020/07/04(土) 13:43:57.26ID:/jHrZd8o0
いきなりデータ粒度を荒くするのは悪手
ましてや>>185の場合はじめに欠損データのノイズキャンセルも行っているのでまとめて行なうとデータの精度が低下する
2020/07/04(土) 14:05:30.25ID:Em2AcreDa
24コマを1コマにするんだから
平らに均すのに精度もクソも無い気がする
2020/07/04(土) 14:21:18.07ID:/jHrZd8o0
データ値の定常状態と過渡状態を理解していれば分かる
粒度が荒いと応答性が悪化するので現象の追従が遅れる
安定時のデータ値だけならともかくデータの変化を取りこぼすリスクが高くなるんだよ
2020/07/04(土) 14:31:13.19ID:Em2AcreDa
>>196
そりはモニタのアッパーとローワーにトリガー仕込んだら良い話ではないのでしゅか?
2020/07/04(土) 14:44:04.22ID:/jHrZd8o0
上限、下限決め打ちの場合はトリガ仕込むのでも通用はする
ただ一日当たりの変化量でアクション起こす場合はどうする?
移動差分(微分)を連続的にデータ処理しないと難しい
2020/07/04(土) 14:48:04.16ID:ZiXQ0AsVa
喧嘩はやめよう
2020/07/04(土) 14:58:18.35ID:oup49XFx0
>>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
2020/07/04(土) 15:04:44.69ID:xhESn47nr
はい
202デフォルトの名無しさん (アウアウエー Sa82-h0J+)
垢版 |
2020/07/04(土) 15:22:36.21ID:ZKMg5qK7a
>>198
地デジのようなリアルタイムデコードじゃなくて
過去に既に起こってしまったデータ欠損の過ちをVBA で穴埋めしようとしたたところで土台遅いと言う話でした。
>>199
そうですね
2020/07/04(土) 15:31:40.93ID:VZt6Ms3K0
>>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)
これにブレークポイントつけてここに到達するケースがあるか調べてみ
それだけで何か分かるわ

まぁだれか正解のコード書いちゃうんだろうけど
デバッグ
ブレークポイント
これ使えないとまともなコード書けないぞ
2020/07/04(土) 15:38:09.49ID:VZt6Ms3K0
それだけじゃないからな
redim preserve は、くせ者
2020/07/04(土) 15:42:33.80ID:RSp2d2NT0
redimしなくても十分な量確保しといてどこまで使ったか変数に入れときゃいいだけだろ
わざわざ負荷かかることする意味がない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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