!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
Excel VBA 質問スレ Part76
https://mevius.5ch.net/test/read.cgi/tech/1651339421/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
Excel VBA 質問スレ Part77
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (TW 0H42-j7SA)
2022/07/17(日) 07:07:35.59ID:tS4zKdphH397デフォルトの名無しさん (アウアウウー Saa5-Pw8Y)
2022/08/17(水) 01:45:03.16ID:d962r+SMa ソルのはムダ毛だけにしとけ
398デフォルトの名無しさん (スッップ Sd62-BYM4)
2022/08/17(水) 01:57:01.99ID:sNWv67oad 頭髪は生えないのに髭は生える
399デフォルトの名無しさん (ワッチョイ e274-Jrkb)
2022/08/17(水) 04:59:55.38ID:EILeizBb0400デフォルトの名無しさん (ワッチョイ 4dda-xxo+)
2022/08/17(水) 07:35:41.89ID:hasTYsFP0 頭髪はハゲても、耳毛は濃くなる
401デフォルトの名無しさん (ワッチョイ e1da-5+Zi)
2022/08/17(水) 11:39:32.10ID:Ork7WWB+0 禿ではないのだけど、40歳にして髪は真っ白よ。
402デフォルトの名無しさん (ワッチョイ 6eda-5Ix7)
2022/08/17(水) 12:34:16.41ID:V9XsbrNu0 好きな色に染めようぜ
403デフォルトの名無しさん (オッペケ Srf1-Uo2u)
2022/08/17(水) 12:58:33.86ID:PQdbwjDzr Excelらしく緑だな
404デフォルトの名無しさん (ササクッテロ Spf1-gduT)
2022/08/18(木) 12:18:45.39ID:yPHO1+kSp なんという体たらく
もうハゲはこのスレ出入り禁止でいいな
もうハゲはこのスレ出入り禁止でいいな
405デフォルトの名無しさん (ワッチョイ fdb7-laJE)
2022/08/18(木) 13:11:18.15ID:EfwMa2qS0 2つの表があって、表Aと表Bとして
表の作りは二つとも同じで、
コードと数字を持ってます。
二つの表のコードが一致してる場合は
コード A B
101 50 60
102 40 100
103 30
104 50
といった感じで片方にしか存在しない場合は片方だけの行を追加して行くってvbaを作りたいんですが、何かいい案はありますか?
AとBの表で数字の比較をしたいです
for nextでやろうとしてますがうまくいいやり方が見つからずです
表の作りは二つとも同じで、
コードと数字を持ってます。
二つの表のコードが一致してる場合は
コード A B
101 50 60
102 40 100
103 30
104 50
といった感じで片方にしか存在しない場合は片方だけの行を追加して行くってvbaを作りたいんですが、何かいい案はありますか?
AとBの表で数字の比較をしたいです
for nextでやろうとしてますがうまくいいやり方が見つからずです
406デフォルトの名無しさん (ブーイモ MM85-Hx7L)
2022/08/18(木) 13:24:26.87ID:EMP5KmCeM まずVBAを忘れます
SQLで FULL OUTER JOIN します
(゚д゚)
SQLで FULL OUTER JOIN します
(゚д゚)
407デフォルトの名無しさん (ワッチョイ 468c-hYSv)
2022/08/18(木) 14:31:25.04ID:qheAbwQK0 >>405
テーブルのリレーションシップを設定したらいいんじゃないかな
テーブルのリレーションシップを設定したらいいんじゃないかな
408デフォルトの名無しさん (アウアウウー Saa5-dwW8)
2022/08/18(木) 14:35:35.98ID:DWDOTpPia 例えば以下の様なデータがあるとします
開始~終了:消費量
1月1日 0時~1月1日16時:500
1月1日16時~1月2日10時:1000
1月2日10時~1月5日 0時:800
1月5日 0時~1月5日0時:300
1月5日0時~1月6日0時:2500
1月6日0時~1月7日12時:1200
このように時間の区切りがバラバラ(かつ日跨ぎや0分間もある)のデータに対して、1月1日、2日、3日にそれぞれ合計いくらかを出したいです
なお、例えば20時~翌6時で1000の様な場合は4h:6h=400:600として計上したいです
どう計算するか方針すら思い浮かばないのですが何かアイディアありましたら教えてください
開始~終了:消費量
1月1日 0時~1月1日16時:500
1月1日16時~1月2日10時:1000
1月2日10時~1月5日 0時:800
1月5日 0時~1月5日0時:300
1月5日0時~1月6日0時:2500
1月6日0時~1月7日12時:1200
このように時間の区切りがバラバラ(かつ日跨ぎや0分間もある)のデータに対して、1月1日、2日、3日にそれぞれ合計いくらかを出したいです
なお、例えば20時~翌6時で1000の様な場合は4h:6h=400:600として計上したいです
どう計算するか方針すら思い浮かばないのですが何かアイディアありましたら教えてください
409デフォルトの名無しさん (ワッチョイ 42d8-joTH)
2022/08/18(木) 15:01:03.74ID:JMDQexcx0 vlookupでできない?
普通にforループでも難しいことなさそうだけど、どんなコード書いたの?
普通にforループでも難しいことなさそうだけど、どんなコード書いたの?
410デフォルトの名無しさん (ワッチョイ 42d8-joTH)
2022/08/18(木) 15:04:36.75ID:JMDQexcx0411デフォルトの名無しさん (ブーイモ MM85-Ufop)
2022/08/18(木) 15:14:31.63ID:EMP5KmCeM >>408
まず問題を分割しよう
まず(step1)日別にレコードを分割し、(step2)それを日付でグループ化して合計を出すと考えればいい
step2は典型的なグループ化と小計なんで楽勝として、step1はちょっと面倒だから更に分割しようか
例えば、入力として一行の内容を渡すと、日別分割されたレコードの配列を返す関数を作って、その結果を結合すればいいだろう
まず問題を分割しよう
まず(step1)日別にレコードを分割し、(step2)それを日付でグループ化して合計を出すと考えればいい
step2は典型的なグループ化と小計なんで楽勝として、step1はちょっと面倒だから更に分割しようか
例えば、入力として一行の内容を渡すと、日別分割されたレコードの配列を返す関数を作って、その結果を結合すればいいだろう
412デフォルトの名無しさん (スッップ Sd62-9bk+)
2022/08/18(木) 15:53:00.45ID:XgHMEnCRd >>405
深く考えなくていいなら
①2つの表(シート)をそれぞれ参照して作業用のシートAを作る
コード シート 値
101 A 50
102 A 40
・・・
101 B 60
102 B 100
②シートAをソートする
③シートAの内容を読み込んで質問にあるようなシートBを作る
深く考えなくていいなら
①2つの表(シート)をそれぞれ参照して作業用のシートAを作る
コード シート 値
101 A 50
102 A 40
・・・
101 B 60
102 B 100
②シートAをソートする
③シートAの内容を読み込んで質問にあるようなシートBを作る
413デフォルトの名無しさん (ワッチョイ fdb7-laJE)
2022/08/18(木) 16:12:23.70ID:EfwMa2qS0 できた!
二重ループでできました。
二重ループでできました。
414411 (ブーイモ MM85-Ufop)
2022/08/18(木) 16:21:20.45ID:fCi7ElhaM 日別分割関数について補足しておこう
この関数を更に分割すれば、下記のようになるだろう
(1) 開始日時と終了日時の間の日付を全て取得する
(2) 終了日時と開始日時の差を時間単位で求め、結果をHとする
(3) (1) で取得したそれぞれの日付(dとする)について、下記を実施する
(3.1) 開始日時と終了日時の間において、日付dに属する時間が何時間あるかを計算し、結果をhとする
(3.2) 消費量*h/Hを計算し、結果をxとする
(3.3) 日付dと消費量xのペアを分割結果の1レコードとする
ここまで分ければ簡単だろう。もしまだ難しければこのように適宜分割するとよい。
この関数を更に分割すれば、下記のようになるだろう
(1) 開始日時と終了日時の間の日付を全て取得する
(2) 終了日時と開始日時の差を時間単位で求め、結果をHとする
(3) (1) で取得したそれぞれの日付(dとする)について、下記を実施する
(3.1) 開始日時と終了日時の間において、日付dに属する時間が何時間あるかを計算し、結果をhとする
(3.2) 消費量*h/Hを計算し、結果をxとする
(3.3) 日付dと消費量xのペアを分割結果の1レコードとする
ここまで分ければ簡単だろう。もしまだ難しければこのように適宜分割するとよい。
415デフォルトの名無しさん (ワッチョイ 9901-laJE)
2022/08/18(木) 16:23:33.57ID:MNMwm62Z0 初歩的な質問なんだけど、上下一致してる場合だけ転記して行くという場合
1行目は例外として省く処理いれて
cells(r-1,1)=cells(r,1)とかってやってくと、不一致のものが現れた時に一致してた行の最初の値が転記できなくなるんだけどどうしたらいい?
100
100
101
101
102
とかって並びの時に、100の一番上が転記されないとか
102とかも転記されない
上下比較の時の最適解の比較方法を知りたい
1行目は例外として省く処理いれて
cells(r-1,1)=cells(r,1)とかってやってくと、不一致のものが現れた時に一致してた行の最初の値が転記できなくなるんだけどどうしたらいい?
100
100
101
101
102
とかって並びの時に、100の一番上が転記されないとか
102とかも転記されない
上下比較の時の最適解の比較方法を知りたい
416デフォルトの名無しさん (ワッチョイ 4201-8lLW)
2022/08/18(木) 16:23:56.43ID:X/mZUHYK0 >>405
結構面倒、前提条件として「表A, 表Bのコードは各々ソートされてる」かつ「表A, 表Bのコードは各々の表内で重複してない」のであれば...
Type T
S As WorkSheet: L As Long: R As Long: C As Long: D As Long: F As Boolean
End Type
Dim TA As T, TB As T
Set TA.S = WorkSheets("表A"): Set TB.S = WorkSheets("表B")
TA.L = TA.S.Cells(TA.S.Rows.Count, 1).End(xlUp).Row: TB.L = TB.S.Cells(TB.S.Rows.Count, 1).End(xlUp).Row
TA.R = 1: TB.R = 1
TA.F = False: TB.F = False
Dim S As WorkSheet: Set S = WorkSheets("結果")
Dim R As Long: R = 1
Do
G TA: G TB
If TA.F And TB.F And TA.C = TB.C Then
S.Cells(R, "A").Value = TA.C: S.Cells(R, "B").Value = TA.D: S.Cells(R, "C").Value = TB.D: TA.F = False: TB.F = False
ElseIf (TA.F And TB.F And TA.C < TB.C) Or (TA.F And Not TB.F) Then
S.Cells(R, "A").Value = TA.C: S.Cells(R, "B").Value = TA.D: TA.F = False
ElseIf (TA.F And TB.F And TB.C < TA.C) Or (Not TA.F And TB.F) Then
S.Cells(R, "A").Value = TB.C: S.Cells(R, "C").Value = TB.D: TB.F = False
Else
Exit Do
End If
R= R + 1
Loop
Private Sub G(T As T)
If Not T.F And T.R <= T.L Then
T.C = T.S.Cells(T.R, "A").Value: T.D = T.S.Cells(T.R, "B").Value: T.F = True: T.R = T.R + 1
End If
End Sub
結構面倒、前提条件として「表A, 表Bのコードは各々ソートされてる」かつ「表A, 表Bのコードは各々の表内で重複してない」のであれば...
Type T
S As WorkSheet: L As Long: R As Long: C As Long: D As Long: F As Boolean
End Type
Dim TA As T, TB As T
Set TA.S = WorkSheets("表A"): Set TB.S = WorkSheets("表B")
TA.L = TA.S.Cells(TA.S.Rows.Count, 1).End(xlUp).Row: TB.L = TB.S.Cells(TB.S.Rows.Count, 1).End(xlUp).Row
TA.R = 1: TB.R = 1
TA.F = False: TB.F = False
Dim S As WorkSheet: Set S = WorkSheets("結果")
Dim R As Long: R = 1
Do
G TA: G TB
If TA.F And TB.F And TA.C = TB.C Then
S.Cells(R, "A").Value = TA.C: S.Cells(R, "B").Value = TA.D: S.Cells(R, "C").Value = TB.D: TA.F = False: TB.F = False
ElseIf (TA.F And TB.F And TA.C < TB.C) Or (TA.F And Not TB.F) Then
S.Cells(R, "A").Value = TA.C: S.Cells(R, "B").Value = TA.D: TA.F = False
ElseIf (TA.F And TB.F And TB.C < TA.C) Or (Not TA.F And TB.F) Then
S.Cells(R, "A").Value = TB.C: S.Cells(R, "C").Value = TB.D: TB.F = False
Else
Exit Do
End If
R= R + 1
Loop
Private Sub G(T As T)
If Not T.F And T.R <= T.L Then
T.C = T.S.Cells(T.R, "A").Value: T.D = T.S.Cells(T.R, "B").Value: T.F = True: T.R = T.R + 1
End If
End Sub
417デフォルトの名無しさん (ワッチョイ fdb7-laJE)
2022/08/18(木) 16:34:05.48ID:EfwMa2qS0 >>416
ありがとぅざいます!
そうなんです
考え出したらこれかなり面倒だなと思って、、
同じような発想かもしれないですが
外のループはA表のコード番号の縦列の値を固定して、
内側ループでB表を縦にコードが一致するまで検知して
一致した場合フラグを立てて、一致したコードの時は一致してるコードの隣に値を転記。
内側ループを抜けた時点でフラグが立っていない場合はBにしか存在しない値なので、A表の最終行以降に転記
って考え方でいけました!
ありがとぅざいます!
そうなんです
考え出したらこれかなり面倒だなと思って、、
同じような発想かもしれないですが
外のループはA表のコード番号の縦列の値を固定して、
内側ループでB表を縦にコードが一致するまで検知して
一致した場合フラグを立てて、一致したコードの時は一致してるコードの隣に値を転記。
内側ループを抜けた時点でフラグが立っていない場合はBにしか存在しない値なので、A表の最終行以降に転記
って考え方でいけました!
418デフォルトの名無しさん (ワッチョイ fdb7-laJE)
2022/08/18(木) 16:37:32.42ID:EfwMa2qS0 あ.A表に転記ではなくてC表ですね
419デフォルトの名無しさん (アウアウウー Saa5-dwW8)
2022/08/18(木) 18:49:57.27ID:AeknNWbaa >>411,414
ありがとうございます、そのヒント元に自己解決できました
1. 対象となる期間を配列に格納
2. データを1つずつ0:00で分解、按分は都度[その日の時間/全体の時間]で実施
3. 配列内の一致する日付に割振り
4. 2-3ループ
ありがとうございます、そのヒント元に自己解決できました
1. 対象となる期間を配列に格納
2. データを1つずつ0:00で分解、按分は都度[その日の時間/全体の時間]で実施
3. 配列内の一致する日付に割振り
4. 2-3ループ
420デフォルトの名無しさん (ワッチョイ 42d8-joTH)
2022/08/18(木) 20:46:21.25ID:JMDQexcx0 >>415
102は一致する相手がいないけど、転記される必要があるのかな?
ぱっと思いつくのは
ポインタをrとsの2つを用意してr=1, s=1から始める
1. Cells(s, 1) == Cells(r, 1) の間だけ s を進める。
2. Cells(s, 1) の値が変わったところで
a) s - r > 1 なら Cells(r, 1) を転記しながら s に追いつくまで r を進める
b) s - r == 1 なら転機せずに s に追いつくまで r を進める
3. 1からの手順を表の最後まで繰り返す
102は一致する相手がいないけど、転記される必要があるのかな?
ぱっと思いつくのは
ポインタをrとsの2つを用意してr=1, s=1から始める
1. Cells(s, 1) == Cells(r, 1) の間だけ s を進める。
2. Cells(s, 1) の値が変わったところで
a) s - r > 1 なら Cells(r, 1) を転記しながら s に追いつくまで r を進める
b) s - r == 1 なら転機せずに s に追いつくまで r を進める
3. 1からの手順を表の最後まで繰り返す
421デフォルトの名無しさん (ワッチョイ 9901-jfTJ)
2022/08/18(木) 22:39:41.60ID:MNMwm62Z0422デフォルトの名無しさん (ワッチョイ 4d2f-O3lh)
2022/08/19(金) 01:11:58.45ID:OSKKwF+I0423デフォルトの名無しさん (ワッチョイ 9901-jfTJ)
2022/08/19(金) 07:58:47.24ID:YEGDOEOJ0424デフォルトの名無しさん (ワッチョイ e179-ETcs)
2022/08/19(金) 09:33:47.59ID:TD6yT77i0 まずどういう出力か書けよ
頭悪すぎだろ
頭悪すぎだろ
425デフォルトの名無しさん (ササクッテロ Spf1-gduT)
2022/08/19(金) 10:55:40.42ID:agk3kSn7p426デフォルトの名無しさん (ワッチョイ 42d8-joTH)
2022/08/19(金) 11:00:49.57ID:0SH6JCsd0427デフォルトの名無しさん (スップ Sdc2-ZiF6)
2022/08/19(金) 11:05:43.32ID:nezaNaBad 423の足しこんでいくというのは?もう何もわからない
428デフォルトの名無しさん (スップ Sdc2-ZiF6)
2022/08/19(金) 11:07:12.98ID:nezaNaBad 転記?今日の天気?
Excel必要ですか
Excel必要ですか
429デフォルトの名無しさん (ワッチョイ e1da-5+Zi)
2022/08/19(金) 11:32:50.63ID:LZdSBpbV0 うるせえ!この禿!
430デフォルトの名無しさん (ワッチョイ 6eda-5Ix7)
2022/08/19(金) 13:14:47.90ID:aeNJth6k0 まず髪の毛緑に染めてこい
431デフォルトの名無しさん (スッップ Sd62-9bk+)
2022/08/19(金) 13:37:04.21ID:NSoYBxeid 質問する側がおかしいと(どういう結果にしたいかが不明の場合)回答する気も失せるよね上下一致と言われたら
A
B
C
D
ならBを基準にA=BかつB=Cって自分はするんだが違うんだろ?
A
B
C
D
ならBを基準にA=BかつB=Cって自分はするんだが違うんだろ?
432デフォルトの名無しさん (ワッチョイ d2bd-dwW8)
2022/08/19(金) 16:42:31.05ID:TM0tepDc0 重複除去したいって解釈してた
433デフォルトの名無しさん (ワッチョイ 4d2f-O3lh)
2022/08/19(金) 17:14:26.61ID:OSKKwF+I0434デフォルトの名無しさん (ワッチョイ e1da-5+Zi)
2022/08/19(金) 19:41:03.51ID:LZdSBpbV0 知らないのでわ?
435デフォルトの名無しさん (スップ Sdc2-9bk+)
2022/08/19(金) 19:54:20.05ID:fs7pDiUMd 足しこむとか転記とか何がしたいか意味不明なんだよね
単純にいま記載されている列の値について
1.同じ値が続く場合は最初の一つだけ残す
2.ただし途中にある空白は無視する(1、空白、1は同じ値が続いてるとする)
3.最終的に残した値で詰める または 残した値は別の列なりシートなりに転記する
みたいな事をやりたいのか質問見ただけではわからんのよね
この場合なら検索する行とセットする行を用意すれば簡単にできる話なんだけどね
仕事もそうなんだけど説明が下手な人ってやっぱり仕事もできない人が多い
単純にいま記載されている列の値について
1.同じ値が続く場合は最初の一つだけ残す
2.ただし途中にある空白は無視する(1、空白、1は同じ値が続いてるとする)
3.最終的に残した値で詰める または 残した値は別の列なりシートなりに転記する
みたいな事をやりたいのか質問見ただけではわからんのよね
この場合なら検索する行とセットする行を用意すれば簡単にできる話なんだけどね
仕事もそうなんだけど説明が下手な人ってやっぱり仕事もできない人が多い
436デフォルトの名無しさん (スッップ Sd62-hvLj)
2022/08/19(金) 20:23:56.98ID:uBoRK/pGd 足し込むというのが加算という意味であれば必然的に数値ということになるけど、、、
上の行と同じ数値なら足し算する=2倍するってことか?
それとも上と下の行が同じ数値なら現在行と上下の3行の和にするってことか?
なんかいろんな解釈ができる要望なんよね。。。
上の行と同じ数値なら足し算する=2倍するってことか?
それとも上と下の行が同じ数値なら現在行と上下の3行の和にするってことか?
なんかいろんな解釈ができる要望なんよね。。。
437デフォルトの名無しさん (ワッチョイ 424f-gduT)
2022/08/19(金) 22:10:12.43ID:zQKwV5nn0 まぁ重複したデータを足し込むのか削除するのかはさした問題ではない。
ディクショナリやコレクションに元にあった値をキーにして
まずキーと同じ値をキーに該当する値として設定して、
同じキーが次回来たときに無視するか足し込むかすればいいだけの話だからな
最後にそれをシートに展開すればいいだけの話。
そうしとけば足し込もうが重複削除だろうが簡単に対応出来る。
SQLを知っているならSQLでやってもいい。
問題は同じ値が飛び石で来る可能性があるのかということ。
例えば101、101、102、101の順序で来ることがあるのか?
この場合、要件としては「上下で一致しているものだけ足し込む」ということなので上の例で言えば202、102、101と設定されるのが正ということになる。
これは上記した方法でやるのはかえってまどろっこしい。
そうしたら上から舐めてコレクションに値を格納、前回の行と次の行の頭が同じなら無視するか足し込むかすればいいし、値が違うならそのままコレクションに追加すればいい。
最後にそれをシートに展開する。
このように同じ数値が飛び石で来るかで作りがガラッと変わってしまう。せめてそこだけでもハッキリさせてくれれば。
ディクショナリやコレクションに元にあった値をキーにして
まずキーと同じ値をキーに該当する値として設定して、
同じキーが次回来たときに無視するか足し込むかすればいいだけの話だからな
最後にそれをシートに展開すればいいだけの話。
そうしとけば足し込もうが重複削除だろうが簡単に対応出来る。
SQLを知っているならSQLでやってもいい。
問題は同じ値が飛び石で来る可能性があるのかということ。
例えば101、101、102、101の順序で来ることがあるのか?
この場合、要件としては「上下で一致しているものだけ足し込む」ということなので上の例で言えば202、102、101と設定されるのが正ということになる。
これは上記した方法でやるのはかえってまどろっこしい。
そうしたら上から舐めてコレクションに値を格納、前回の行と次の行の頭が同じなら無視するか足し込むかすればいいし、値が違うならそのままコレクションに追加すればいい。
最後にそれをシートに展開する。
このように同じ数値が飛び石で来るかで作りがガラッと変わってしまう。せめてそこだけでもハッキリさせてくれれば。
438デフォルトの名無しさん (スップ Sd1f-XvCx)
2022/08/20(土) 00:10:31.82ID:KYv4qV6Cd もう終わった話なんだと思うけど正直質問する人はこういうデータをいじりたいという事は伝えても
結果としてこういうものが欲しいっていう事を伝える人が少ないんだよね
だからいろんな解釈ができるからその辺もちゃんと情報を伝えてほしいわ
結果としてこういうものが欲しいっていう事を伝える人が少ないんだよね
だからいろんな解釈ができるからその辺もちゃんと情報を伝えてほしいわ
439デフォルトの名無しさん (ワッチョイ ffda-tEjH)
2022/08/21(日) 19:54:19.68ID:+6WkTpkf0 そういうの含めて個人の能力
440デフォルトの名無しさん (ワッチョイ 1f5f-liIk)
2022/08/24(水) 18:51:09.99ID:VyM585LM0 Unique関数の引数って二次元配列じゃないとだめなの?
441デフォルトの名無しさん (ブーイモ MM0f-EEuy)
2022/08/24(水) 19:20:17.01ID:lK4e5BLcM Range型を渡すんじゃダメなの?
442デフォルトの名無しさん (ワッチョイ ffda-qb5s)
2022/08/24(水) 20:13:49.71ID:LO0U8Jrb0 実際に試してみれば答えが出ると思うのだが
443デフォルトの名無しさん (ワッチョイ 1fce-tEjH)
2022/08/24(水) 22:08:51.37ID:087AndgI0 マニュアル読め
444デフォルトの名無しさん (ワッチョイ 9fda-iK0u)
2022/08/24(水) 22:19:47.85ID:Gbtg5dPu0 MSヘルプですね~
445デフォルトの名無しさん (ワッチョイ 4666-JjaS)
2022/08/28(日) 22:27:57.16ID:uLwcj+rg0 excel2019
win10
設定シートに各項目を入力させたらそれに応じて別シートに計算結果を入力させるVBAを書いてる途中なのですが、
VBAソースを書いてる途中に設定シートにこんな数値も持たせたい、
入力画面のレイアウトをあれこれ変えたいと行や列の挿入をしたくなってしまうのですが
そうするとVBAソースの方がずれたままになってしまうのですが、シートに挿入をしたら
それにともなって既にかけている部分だけでもソースコードのcellsやrangeの値が更新されてくれたりしないでしょうか?
win10
設定シートに各項目を入力させたらそれに応じて別シートに計算結果を入力させるVBAを書いてる途中なのですが、
VBAソースを書いてる途中に設定シートにこんな数値も持たせたい、
入力画面のレイアウトをあれこれ変えたいと行や列の挿入をしたくなってしまうのですが
そうするとVBAソースの方がずれたままになってしまうのですが、シートに挿入をしたら
それにともなって既にかけている部分だけでもソースコードのcellsやrangeの値が更新されてくれたりしないでしょうか?
446デフォルトの名無しさん (ワッチョイ 868c-6eY1)
2022/08/28(日) 22:36:45.40ID:bZvgSFoz0447デフォルトの名無しさん (ワッチョイ c95f-yNcK)
2022/08/28(日) 22:37:28.82ID:z6hd8oqM0448デフォルトの名無しさん (ワッチョイ 59da-Xdj5)
2022/08/29(月) 20:34:19.97ID:6xba6Hkk0 おまいらが毛がどうのこうので喜ぶがらマジで頭ツルッツルにしてきたぞ
449デフォルトの名無しさん (スフッ Sd22-2Ehw)
2022/08/29(月) 22:48:42.98ID:Qu5uun0od >>445
コレクションに格納するのが攻守最強
コレクションに格納するのが攻守最強
450デフォルトの名無しさん (ワッチョイ ad2f-6Yq+)
2022/08/31(水) 02:50:20.75ID:Ie2cpGsY0 >>449
そのコレクションの中身はどうやって保守するのかね?
そのコレクションの中身はどうやって保守するのかね?
451デフォルトの名無しさん (ワッチョイ aeda-6Yq+)
2022/08/31(水) 19:22:22.41ID:QCzzbP6t0 >>448
ツルツルがいいのは下の毛です
ツルツルがいいのは下の毛です
452デフォルトの名無しさん (ワッチョイ 59da-Xdj5)
2022/08/31(水) 22:52:05.08ID:q/z2hnkB0453デフォルトの名無しさん (ワッチョイ 4666-JjaS)
2022/09/01(木) 03:46:18.56ID:Xg3rwxDQ0 win10
excel2019
Sub y()
Dim st As Range
Set st = Worksheets("参加者").Range("A1:BA80").Find(What:="氏名")
If st is Nothing Then
else
Debug.Print st.Row
end if
End Sub
これをすると"氏名"文字列に一致したセルがrangeオブジェクトで貰えますけど
本当に欲しいのは氏名のx個下のrangeオブジェクトなのです。
氏名のセルと参加者の開始セルの相対位置は固定的です。
氏名はいろいろな名前があるのでマッチングしづらいので氏名で位置を探って取り込んでいます。
rowやcolumnくらいしか使いませんけど、すっきり感としては本当に欲しいのは氏名の開始セルのrangeオブジェクトなのです。
返り値のrangeオブジェクトをずらすということはできますでしょうか?
excel2019
Sub y()
Dim st As Range
Set st = Worksheets("参加者").Range("A1:BA80").Find(What:="氏名")
If st is Nothing Then
else
Debug.Print st.Row
end if
End Sub
これをすると"氏名"文字列に一致したセルがrangeオブジェクトで貰えますけど
本当に欲しいのは氏名のx個下のrangeオブジェクトなのです。
氏名のセルと参加者の開始セルの相対位置は固定的です。
氏名はいろいろな名前があるのでマッチングしづらいので氏名で位置を探って取り込んでいます。
rowやcolumnくらいしか使いませんけど、すっきり感としては本当に欲しいのは氏名の開始セルのrangeオブジェクトなのです。
返り値のrangeオブジェクトをずらすということはできますでしょうか?
454453 (ワッチョイ 4666-JjaS)
2022/09/01(木) 03:53:25.83ID:Xg3rwxDQ0 Set st = Worksheets("参加者").Range("A1:BA80").Find(What:="氏名").offset(1,1)
こんな感じで解決しました。
動いてるのはまぐれでしょうか?
こんな感じで解決しました。
動いてるのはまぐれでしょうか?
455デフォルトの名無しさん (ワッチョイ c95f-yNcK)
2022/09/01(木) 06:49:22.79ID:UMivoEC40456デフォルトの名無しさん (アウアウウー Sa85-Q92Q)
2022/09/01(木) 09:42:20.83ID:wgtUDrt5a 451
おまわりさんこいつです
おまわりさんこいつです
457デフォルトの名無しさん (ブーイモ MM4d-yNcK)
2022/09/01(木) 10:01:37.99ID:Ak8bAeS9M VIO脱毛する人が増えてる
458デフォルトの名無しさん (ワッチョイ 4666-JjaS)
2022/09/01(木) 10:51:28.10ID:Xg3rwxDQ0 >>455
何度か書き込もうとしたんですけど、書き込みエラーになってしまっていました。
なんだかレスアンカーが不正とか出てきてたのでわからなくなりました。
レスアンカーをつけちゃいけないみたいな制約?
>>445に回答いただいた方ありがとうございました。
これも書き込めないかもしれませんが。
RangeオブジェクトのOffsetメソッド?は結合セルがやっかいなのですね。
結合セルでない時のエラー処理を加えると結局コードが汚くなっていくジレンマでした。
オブジェクト型がなかなか理解できません。
dim wf as object
set wf = worksheetfunction
とやってもwf.でエクセル関数を使えるようになるわけではないみたいですし。
ありがとうございました。
何度か書き込もうとしたんですけど、書き込みエラーになってしまっていました。
なんだかレスアンカーが不正とか出てきてたのでわからなくなりました。
レスアンカーをつけちゃいけないみたいな制約?
>>445に回答いただいた方ありがとうございました。
これも書き込めないかもしれませんが。
RangeオブジェクトのOffsetメソッド?は結合セルがやっかいなのですね。
結合セルでない時のエラー処理を加えると結局コードが汚くなっていくジレンマでした。
オブジェクト型がなかなか理解できません。
dim wf as object
set wf = worksheetfunction
とやってもwf.でエクセル関数を使えるようになるわけではないみたいですし。
ありがとうございました。
459デフォルトの名無しさん (ワッチョイ 4666-JjaS)
2022/09/01(木) 11:00:01.20ID:Xg3rwxDQ0 Function wf() As WorksheetFunction
Set wf() = WorksheetFunction
End Function
こっちで呼び出し短縮は出来ました。初めて使いましたfunction
Set wf() = WorksheetFunction
End Function
こっちで呼び出し短縮は出来ました。初めて使いましたfunction
460デフォルトの名無しさん (ワッチョイ 4666-JjaS)
2022/09/01(木) 14:07:42.09ID:Xg3rwxDQ0 名前付きセル範囲を使うためにnamesコレクションを理解しようとしてるのですが、
activeworkbook.namesをfor eachに入れると現在は1個しか出て来なくて
値が
=#NAME?
こんなのです。エクセルの方から名前の管理を開いてもこの名前は出てきませんし、何も出てきません。
何なのでしょうか?この値は?
なにも設定されてない時の値かと思ってワークシートのあるセルに名前の設定をしみたのですが、
やはりこの値は残ったままでした。
RefersToでもvalueと同じく
=#NAME?
activeworkbook.namesをfor eachに入れると現在は1個しか出て来なくて
値が
=#NAME?
こんなのです。エクセルの方から名前の管理を開いてもこの名前は出てきませんし、何も出てきません。
何なのでしょうか?この値は?
なにも設定されてない時の値かと思ってワークシートのあるセルに名前の設定をしみたのですが、
やはりこの値は残ったままでした。
RefersToでもvalueと同じく
=#NAME?
461460 (ワッチョイ 4666-JjaS)
2022/09/01(木) 14:14:01.95ID:Xg3rwxDQ0 わからないまま、vbaから非表示を表示させるコードをコピペして削除しておきました。
こんな名前作った覚えはないですが
こんな名前作った覚えはないですが
462デフォルトの名無しさん (ワッチョイ 4549-C0nc)
2022/09/01(木) 14:38:52.05ID:nUWOz2Sg0 そっか、うんうん、非表示を表示ね、良かったね
はい次の方
はい次の方
463デフォルトの名無しさん (ワッチョイ 59da-Xdj5)
2022/09/01(木) 15:07:23.09ID:xiyCUJHG0 ニートならロン毛にしろよ
464デフォルトの名無しさん (ワッチョイ 4666-JjaS)
2022/09/01(木) 19:17:21.60ID:Xg3rwxDQ0 Range型と配列の違いが後一歩わからないのですが、
Sheet1にA1=10,A2=20,A3=30,B1=40,B2=50,B3=60....みたいにしてar(2,2)と近い感じにしてます。
Sub Sample1()
Dim ar(2, 2) As Variant
ar(0, 0) = 10
ar(1, 0) = 20
ar(2, 0) = 30
ar(0, 1) = 40
ar(1, 1) = 50
ar(2, 1) = 60
ar(0, 2) = 70
ar(1, 2) = 80
ar(2, 2) = 90
Debug.Print TypeName(ar)
Debug.Print TypeName(Worksheets("Sheet1").Range("A1:C3"))
End Sub
arはvariant型の配列でWorksheets("Sheet1").Range("A1:C3")はrange型のオブジェクトになるんですよね。
感覚的にはどちらも配列を渡している気分なのですが、セル範囲参照のrangeだからrange型オブジェクトになるってだけですか?
Sheet1にA1=10,A2=20,A3=30,B1=40,B2=50,B3=60....みたいにしてar(2,2)と近い感じにしてます。
Sub Sample1()
Dim ar(2, 2) As Variant
ar(0, 0) = 10
ar(1, 0) = 20
ar(2, 0) = 30
ar(0, 1) = 40
ar(1, 1) = 50
ar(2, 1) = 60
ar(0, 2) = 70
ar(1, 2) = 80
ar(2, 2) = 90
Debug.Print TypeName(ar)
Debug.Print TypeName(Worksheets("Sheet1").Range("A1:C3"))
End Sub
arはvariant型の配列でWorksheets("Sheet1").Range("A1:C3")はrange型のオブジェクトになるんですよね。
感覚的にはどちらも配列を渡している気分なのですが、セル範囲参照のrangeだからrange型オブジェクトになるってだけですか?
465デフォルトの名無しさん (スプッッ Sd82-GCvl)
2022/09/01(木) 19:18:06.47ID:EeQXBP72d 馬鹿過ぎてやばい奴が来てる
466464 (ワッチョイ 4666-JjaS)
2022/09/01(木) 19:23:31.46ID:Xg3rwxDQ0 for each のinの後に配列をおいても、range型オブジェクトをおいても
同じように中身を取り出してくれるから混乱してしまったのかもしれません。
同じように中身を取り出してくれるから混乱してしまったのかもしれません。
467デフォルトの名無しさん (ワッチョイ 61da-6Yq+)
2022/09/01(木) 19:28:08.64ID:bYXIuDKK0 もし Dim ar(2, 2, 2) As Variant なら3次元の配列としか言いようがない
468デフォルトの名無しさん (ワッチョイ 06da-eq86)
2022/09/01(木) 20:43:50.82ID:QMR92n1t0 本人は切実なんだろうけどイマイチ何を理解しようとしているのかが汲み取れない。
とりあえず、シートは二次元配列みたいなものと思えばいいんじゃないかなぁ。
バリアント型の変数に範囲指定したrangeを代入したら配列が出来上がるんだから。。。
って、こういうの説明するのって余計に混乱させそうで怖いのよね。
とりあえず、シートは二次元配列みたいなものと思えばいいんじゃないかなぁ。
バリアント型の変数に範囲指定したrangeを代入したら配列が出来上がるんだから。。。
って、こういうの説明するのって余計に混乱させそうで怖いのよね。
469デフォルトの名無しさん (ワッチョイ 59da-Xdj5)
2022/09/01(木) 22:31:39.49ID:xiyCUJHG0 なんでそんな事やっているんだろう。。??
470デフォルトの名無しさん (ワッチョイ 0de6-NyG/)
2022/09/01(木) 23:45:17.73ID:7Zuj6Csb0 Rangeオブジェクトと配列、全く異質のものなのに同じ代入インターフェースがつかえるのが不思議なのでしょう
女学生は貧困で給食費すら払えないのに上級国民は交通費で200万円貰えるのですから
女学生は貧困で給食費すら払えないのに上級国民は交通費で200万円貰えるのですから
471デフォルトの名無しさん (ワッチョイ 868c-6eY1)
2022/09/02(金) 00:10:13.04ID:vXxCvmAd0472デフォルトの名無しさん (ワッチョイ ad2f-6Yq+)
2022/09/02(金) 03:22:55.43ID:XYWvvS0T0 >>464
オブジェクトにはデフォルトプロパティというのがあってな
オブジェクトを参照してるつもりでも、実はそのデフォルトプロパティを参照してるんだよ
Worksheets("Sheet1").Range("A1:C3")はRange型だが、
そのデフォルトプロパティは2次元配列なのだよ
オブジェクトにはデフォルトプロパティというのがあってな
オブジェクトを参照してるつもりでも、実はそのデフォルトプロパティを参照してるんだよ
Worksheets("Sheet1").Range("A1:C3")はRange型だが、
そのデフォルトプロパティは2次元配列なのだよ
473デフォルトの名無しさん (ワッチョイ 023e-y80L)
2022/09/02(金) 06:34:36.12ID:p8HOStyU0 ttps://www.tipsfound.com/vba/18014
このコードでcsvファイルをエクセルの指定のシートに取り込めますか?
このコードでcsvファイルをエクセルの指定のシートに取り込めますか?
474デフォルトの名無しさん (ワッチョイ 02d8-OFDU)
2022/09/02(金) 07:13:47.06ID:rviUcujq0 >>473
やってみて聞いてるの?自分でやるのが面倒臭いからとりあえず聞いてるだけ?
やってみて聞いてるの?自分でやるのが面倒臭いからとりあえず聞いてるだけ?
475デフォルトの名無しさん (ワッチョイ 4205-6Yq+)
2022/09/02(金) 07:18:17.22ID:K+fb6kZO0 最近のレベル低下には目を見張るものがあるな
476デフォルトの名無しさん (ワントンキン MM52-Pz8G)
2022/09/02(金) 07:25:48.67ID:+uzTYabFM 総合相談所で総スカンされた馬鹿だろ
477デフォルトの名無しさん (ワッチョイ 59da-Xdj5)
2022/09/02(金) 11:01:00.75ID:BYdQXtrB0 いや、そもそも何でそんな事やりたいのか??
という質問自体がさ
という質問自体がさ
478デフォルトの名無しさん (ワッチョイ 61da-AuBP)
2022/09/02(金) 12:33:00.40ID:MAC5jHq+0 よそのサイトなんだから作った奴にきけばいいのにと思う今日この頃
479デフォルトの名無しさん (ワッチョイ 59da-Xdj5)
2022/09/02(金) 14:51:15.82ID:BYdQXtrB0 ど正論出ました
終了
終了
480デフォルトの名無しさん (ワッチョイ 5f3e-NodX)
2022/09/03(土) 10:31:26.76ID:XL3e+/xJ0 >>476
あれ総スカンだったんですか?
外部データの取り込みでcドライブのファイルを取り込んでいるのに
そのエクセルのファイルを他の人にコピーして渡したら同じ場所にファイルを配置しているのにファイルが読み込めないって聞いただけなのに笑
あれ総スカンだったんですか?
外部データの取り込みでcドライブのファイルを取り込んでいるのに
そのエクセルのファイルを他の人にコピーして渡したら同じ場所にファイルを配置しているのにファイルが読み込めないって聞いただけなのに笑
481デフォルトの名無しさん (スフッ Sd7f-k3HK)
2022/09/03(土) 12:58:16.39ID:WuOEJ3Bid あっちでも総スカンだしここでも総スカンなんだからもういいでしょ
レベル低いよあんた
レベル低いよあんた
482デフォルトの名無しさん (ワッチョイ 7f8e-VPUc)
2022/09/03(土) 14:11:09.43ID:fgoOqg3v0 しつこい馬鹿
483デフォルトの名無しさん (ワッチョイ 07da-oTx6)
2022/09/04(日) 02:41:16.33ID:+4pXrWCU0 向こうの総合相談スレはこのスレと違って厳しい人ばかりだからな。
484デフォルトの名無しさん (ワッチョイ 5f3e-NodX)
2022/09/04(日) 17:26:08.83ID:nTptsQZA0 >>483
VBAのスレよりも質問スレは厳しい人ばかりなんですね
VBAのスレよりも質問スレは厳しい人ばかりなんですね
485デフォルトの名無しさん (ワッチョイ 07da-oTx6)
2022/09/04(日) 21:22:49.28ID:+4pXrWCU0 少しでも的外れな質問したら総スカンだからな。
初級者だろうが容赦ないのが向こう。
初級者だろうが容赦ないのが向こう。
486デフォルトの名無しさん (オッペケ Srbb-bBdM)
2022/09/04(日) 22:38:27.70ID:I+EDFKibr replace関数でワイルドカードを使用してるのですが、
うまく置換していくれないのでなぜですか?
やりたいこと A1セルのKKK1111というデータを2222に変換したい
replace("A1","*" & "K"& "*","2222" )
うまく置換していくれないのでなぜですか?
やりたいこと A1セルのKKK1111というデータを2222に変換したい
replace("A1","*" & "K"& "*","2222" )
487デフォルトの名無しさん (ワッチョイ 07a5-Iguz)
2022/09/04(日) 22:59:56.29ID:PXpvkR6X0 REPLACE(文字列, 開始位置, 文字数, 置換文字列)
488デフォルトの名無しさん (ワッチョイ 07da-oTx6)
2022/09/04(日) 23:39:15.09ID:+4pXrWCU0 優しいなみんな
総合スレだったらフルボッコ
総合スレだったらフルボッコ
489デフォルトの名無しさん (ワッチョイ 5f3e-NodX)
2022/09/05(月) 18:43:28.63ID:8FlTtg5u0 初心者あるあるなんだろうか
490デフォルトの名無しさん (ワッチョイ bf66-bBdM)
2022/09/05(月) 22:48:54.81ID:C53zNTJD0 ありがとうございました。
ユーザー定義型と連想配列を知って少し前進しました。
検索掛けてもなかなかでないので教えてください。
dim i
for i....
使い終わったらiを未定義に戻したいんですが、
宣言の反対?になるような未定義に戻す関数?ステートメント?はありませんか?
ユーザー定義型と連想配列を知って少し前進しました。
検索掛けてもなかなかでないので教えてください。
dim i
for i....
使い終わったらiを未定義に戻したいんですが、
宣言の反対?になるような未定義に戻す関数?ステートメント?はありませんか?
491デフォルトの名無しさん (ワッチョイ 5f42-JTsi)
2022/09/05(月) 23:44:13.97ID:ZiXiUX+x0 無いし気にする必要もない
492デフォルトの名無しさん (ワッチョイ c7da-HH83)
2022/09/06(火) 02:21:14.99ID:xcONMZhZ0 >>490
ちなみに戻したい理由は何?
ちなみに戻したい理由は何?
493デフォルトの名無しさん (スッップ Sd7f-VPUc)
2022/09/06(火) 03:38:48.46ID:DWdJNYk/d 馬鹿に理由を問う虚しさ
494デフォルトの名無しさん (スフッ Sd7f-k3HK)
2022/09/06(火) 05:21:21.45ID:Fb+lfM05d 変数は使い捨てだよVBAの場合
495デフォルトの名無しさん (ワッチョイ bfda-aLkc)
2022/09/06(火) 06:55:14.80ID:FWLy+pWW0 プロシージャ内で宣言した変数ならプロシージャを抜ければクリアされるしマクロ全体が終了すれば全てクリアされるからあまり気にしない。
privateやpublicで宣言したオブジェクトなら明示的にnothingをsetすることはあるけど、イマドキのPCでメモリ解放もあまり気にする必要はない気もする。
エラーで止まったときを考えると念の為しておくくらいかなぁ。
privateやpublicで宣言したオブジェクトなら明示的にnothingをsetすることはあるけど、イマドキのPCでメモリ解放もあまり気にする必要はない気もする。
エラーで止まったときを考えると念の為しておくくらいかなぁ。
496490 (ワッチョイ bf66-bBdM)
2022/09/06(火) 09:27:26.00ID:uuhY1QFW0 初心者なのでプロシージャ内で処理の順番を変えたくなる時があります。
使う直前に宣言したいのでプロシージャの初めに宣言は出来ればしたくありません。
コピペでソースコードを入れ替えて処理の順番を変えるとforが1回目とfor2回目が入れ替わってしまう事があります。
だから毎度forを使う前は、foreacheもそうですが、宣言が必要かをプロシージャ内を戻って探します。
forが終わるたびに未定義に出来ればいいなと思ったのは使い終わった変数名が後からかぶっても
使い終わった時点で未定義に戻しておけばエラーも不具合も出ないからです。
他の言語だとあるのであるかなと思ったのです。
使う直前に宣言したいのでプロシージャの初めに宣言は出来ればしたくありません。
コピペでソースコードを入れ替えて処理の順番を変えるとforが1回目とfor2回目が入れ替わってしまう事があります。
だから毎度forを使う前は、foreacheもそうですが、宣言が必要かをプロシージャ内を戻って探します。
forが終わるたびに未定義に出来ればいいなと思ったのは使い終わった変数名が後からかぶっても
使い終わった時点で未定義に戻しておけばエラーも不具合も出ないからです。
他の言語だとあるのであるかなと思ったのです。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】中国外務省報道官 高市首相発言撤回なければ「断固たる対抗措置」 [蚤の市★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… [BFU★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★2 [BFU★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★7 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★3 [ぐれ★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★8 [おっさん友の会★]
- 高市早苗「つい言い過ぎた」公邸で一人ひきこもる😲 [861717324]
- お笑い芸人「発言の意図を国民に説明した方がいいのでは?」この程度の発言で袋叩きに遭う [931948549]
- 【高市有事】牛肉の対中輸出再開協議が中止wwwwwwwwwwwwwwww [834922174]
- 【👊専】ロケット🚀👊😅👊🚀パーンチww🏡
- 【悲報】ネトウヨ「今回の株価暴落は立憲岡田ショック!!!高市を追い詰めた岡田のせい」 [731544683]
- 日本人、ついに気づく「あれ、日本が対中国で取れる対抗措置ってなくない…?」 [931948549]
