!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ
ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ
※前スレ
Excel VBA 質問スレ Part69
https://mevius.5ch.net/test/read.cgi/tech/1607786543/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
Excel VBA 質問スレ Part70
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ b6da-6NWR)
2021/03/18(木) 22:08:43.71ID:jtngtgXU0688デフォルトの名無しさん (ワッチョイ a72c-zL94)
2021/05/06(木) 20:15:22.86ID:b7Mkjg0R0 >>681
Ruby では、
require 'csv'
input = <<"EOT"
りんご,A,2
りんご,B,4
みかん,D,1
りんご,B,100
EOT
input_ary = CSV.parse( input ) # 2次元配列
# 0/1列目が同じものを排除する。先に現れた行が使われる。「りんご,B,100」は使われない
input_ary.uniq! { |row| [ row[ 0 ], row[ 1 ] ] }
# [["りんご", "A", "2"], ["りんご", "B", "4"], ["みかん", "D", "1"]]
result = [ ]
# フルーツ名でグループ化する
input_ary.group_by { |row| row[ 0 ] }.each do |row|
sum = row[ 1 ].sum{ |row| row[ 2 ].to_i } # 合計
result.push [ row[ 0 ], sum ]
end
pp result #=> [ ["りんご", 6], ["みかん", 1] ]
Ruby では、
require 'csv'
input = <<"EOT"
りんご,A,2
りんご,B,4
みかん,D,1
りんご,B,100
EOT
input_ary = CSV.parse( input ) # 2次元配列
# 0/1列目が同じものを排除する。先に現れた行が使われる。「りんご,B,100」は使われない
input_ary.uniq! { |row| [ row[ 0 ], row[ 1 ] ] }
# [["りんご", "A", "2"], ["りんご", "B", "4"], ["みかん", "D", "1"]]
result = [ ]
# フルーツ名でグループ化する
input_ary.group_by { |row| row[ 0 ] }.each do |row|
sum = row[ 1 ].sum{ |row| row[ 2 ].to_i } # 合計
result.push [ row[ 0 ], sum ]
end
pp result #=> [ ["りんご", 6], ["みかん", 1] ]
689デフォルトの名無しさん (ワッチョイ 7fb0-BCf7)
2021/05/06(木) 20:23:53.60ID:95uMi6p80690デフォルトの名無しさん (ワッチョイ 8768-YF1U)
2021/05/06(木) 21:11:34.82ID:VTnVqyux0 >>681
元データいじっていいなら重複の削除が超早い(ダメでもコピーすればいいだけだけど)
ってかSQLのサブクエリなら一行で行けそうだ
Sub Macro5()
Range("a:c").RemoveDuplicates Array(1, 2), xlYes
ActiveWorkbook.PivotCaches.Create(xlDatabase, Range("a:c")).CreatePivotTable Range("e1"), "p1"
Set p1 = ActiveSheet.PivotTables("p1")
p1.PivotFields("com").Orientation = xlRowField
p1.PivotFields("com").Position = 1
p1.AddDataField p1.PivotFields("v"), "合計 / v", xlSum
End Sub
元データいじっていいなら重複の削除が超早い(ダメでもコピーすればいいだけだけど)
ってかSQLのサブクエリなら一行で行けそうだ
Sub Macro5()
Range("a:c").RemoveDuplicates Array(1, 2), xlYes
ActiveWorkbook.PivotCaches.Create(xlDatabase, Range("a:c")).CreatePivotTable Range("e1"), "p1"
Set p1 = ActiveSheet.PivotTables("p1")
p1.PivotFields("com").Orientation = xlRowField
p1.PivotFields("com").Position = 1
p1.AddDataField p1.PivotFields("v"), "合計 / v", xlSum
End Sub
691デフォルトの名無しさん (ワッチョイ 8768-YF1U)
2021/05/06(木) 21:12:21.95ID:VTnVqyux0 すまん、"com"は"会社名"、"v"は"値段"などに適宜書き換えてくれ
692デフォルトの名無しさん (ワッチョイ df42-YF1U)
2021/05/06(木) 22:14:14.24ID:zoaLFLbx0 D列に
=COUNTIF(B$2:B2,B2)
数値合計に
=SUMIFS($C$2:$C$9,$A$2:$A$9,"=" & E2,$D$2:$D$9,"=1")
=COUNTIF(B$2:B2,B2)
数値合計に
=SUMIFS($C$2:$C$9,$A$2:$A$9,"=" & E2,$D$2:$D$9,"=1")
693デフォルトの名無しさん (ワッチョイ 7f8e-MiMN)
2021/05/06(木) 23:20:33.75ID:srB+AETb0 >>681
しつこい
しつこい
694デフォルトの名無しさん (ワッチョイ eada-K+t/)
2021/05/07(金) 04:04:27.47ID:UcyGqCZa0 いまだにIFとISERROR組み合わせてエラー回避やってる人いるんだ。。。??
695デフォルトの名無しさん (ワッチョイ 2301-UHqe)
2021/05/07(金) 04:24:40.54ID:f/k3XSIv0 流石にいまだにVBA使ってるニキの煽りは違うなw
696デフォルトの名無しさん (ワッチョイ beb0-Asel)
2021/05/07(金) 06:55:01.06ID:sJ3lVRb90 iferrorはエラーの場合の値の置き換えでは?
697デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/07(金) 07:20:54.57ID:tuSKe1qQ0 booleanで取りたい場合はIFとISERROR組み合わせた方が早い
698デフォルトの名無しさん (ワッチョイ cf05-M0W8)
2021/05/07(金) 07:26:43.31ID:DloXWpsH0 Excelのセルって、Accessで言うところのコントロールの
OldValue プロパティってないの?
Application.Undo以外で更新前の値に戻すときに使いたいんだけど
OldValue プロパティってないの?
Application.Undo以外で更新前の値に戻すときに使いたいんだけど
699デフォルトの名無しさん (ラクッペペ MMe6-YEtS)
2021/05/07(金) 08:26:31.62ID:EfOHcgmKM 見りゃわかることをいちいち聞くな
700デフォルトの名無しさん (ワッチョイ 2301-gUNg)
2021/05/07(金) 09:36:16.79ID:dif1qALr0 教えてください
データベースから取得した大量のデータを、他のシートに簡潔集計したいです。
生データシートには
文字列としてyy(2021)mm(03)をはじめ、メーカ、注文番号、数量、ナンバー、大分類、中分類、小分類など68列に渡ってあります。
理想としては別シートに月別に
メーカ、大分類、中分類、小分類(ピポット的配置のイメージ)で購入金額、数量を降順で出したいです。
メーカや分類名は多く、都度新しいのが出たりするので、メンテナンスなくして自動で出せるようにしたいです。
どうすればいいでしょうか。
データベースから取得した大量のデータを、他のシートに簡潔集計したいです。
生データシートには
文字列としてyy(2021)mm(03)をはじめ、メーカ、注文番号、数量、ナンバー、大分類、中分類、小分類など68列に渡ってあります。
理想としては別シートに月別に
メーカ、大分類、中分類、小分類(ピポット的配置のイメージ)で購入金額、数量を降順で出したいです。
メーカや分類名は多く、都度新しいのが出たりするので、メンテナンスなくして自動で出せるようにしたいです。
どうすればいいでしょうか。
701デフォルトの名無しさん (ワントンキン MMda-1ORs)
2021/05/07(金) 09:51:31.13ID:/bDSijiLM >>700
DBに入ってるんだったらSQLで最初からgroup byしたらいいだけ
DBに入ってるんだったらSQLで最初からgroup byしたらいいだけ
702デフォルトの名無しさん (ワッチョイ 2301-gUNg)
2021/05/07(金) 10:21:13.76ID:dif1qALr0703デフォルトの名無しさん (ワッチョイ 6a4f-sv8/)
2021/05/07(金) 10:44:31.42ID:uFptLScD0704デフォルトの名無しさん (ワッチョイ 2301-gUNg)
2021/05/07(金) 10:49:59.41ID:dif1qALr0705デフォルトの名無しさん (ワントンキン MMda-wmZf)
2021/05/07(金) 11:55:04.67ID:Uq/dH8v/M またいつものあいつか
706デフォルトの名無しさん (アウアウウー Sa1f-nFSz)
2021/05/07(金) 12:02:29.78ID:W+W51fKCa ここの諸先輩方にとってSQLってどういう位置付け? 常識レベル?
707デフォルトの名無しさん (ワッチョイ aebd-6gku)
2021/05/07(金) 12:10:39.55ID:Gobk7VPl0 手足と同じレベル
708デフォルトの名無しさん (ワントンキン MMda-1ORs)
2021/05/07(金) 12:13:21.02ID:/bDSijiLM709デフォルトの名無しさん (ワッチョイ 7eda-jjtP)
2021/05/07(金) 15:40:07.47ID:1tkbLq7p0 DeBu
710デフォルトの名無しさん (ワッチョイ 6a4f-sv8/)
2021/05/07(金) 19:08:51.24ID:uFptLScD0 >>704
EXCELでどういうObject使ってシートにSQLを投げるかはVBA シート Sql 辺りでググればいくらでも出てくるけどとりあえず一例としてここかな
http://www7b.biglobe.ne.jp/~whitetiger/ex/ex2002088.html
SQLがどういうものかは流石に SQL 入門 辺りでググってくれ
今は使ってないとしても本来VBAと同等かそれ以上の優先順位で覚えるべきものだから絶対覚えておいた方がいい。
EXCELでどういうObject使ってシートにSQLを投げるかはVBA シート Sql 辺りでググればいくらでも出てくるけどとりあえず一例としてここかな
http://www7b.biglobe.ne.jp/~whitetiger/ex/ex2002088.html
SQLがどういうものかは流石に SQL 入門 辺りでググってくれ
今は使ってないとしても本来VBAと同等かそれ以上の優先順位で覚えるべきものだから絶対覚えておいた方がいい。
711デフォルトの名無しさん (ワッチョイ 2ae6-YEtS)
2021/05/07(金) 20:08:21.87ID:xGNvq5Jp0 なぜインプロセスだかアウトプロレスだかの話を入れたのかがわからないな
712デフォルトの名無しさん (ワッチョイ 732c-M0W8)
2021/05/07(金) 21:41:30.83ID:Z7WMK8Ny0 Ruby on Rails は、MVC(model/view/controller)モデルだから、
最初から、3大データベース(SQLite/MySQL/PostgreSQL)を使う
入門レベル
最初から、3大データベース(SQLite/MySQL/PostgreSQL)を使う
入門レベル
713デフォルトの名無しさん (ワッチョイ be8e-gIfd)
2021/05/07(金) 22:30:42.79ID:hSzgOaHp0 >>712
MVCだから?馬鹿は黙ってろよ
MVCだから?馬鹿は黙ってろよ
714デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 00:33:08.33ID:H8oTRyi2d >>712
ちょっと何言ってるのかわからない
ちょっと何言ってるのかわからない
715デフォルトの名無しさん (ワントンキン MMda-wmZf)
2021/05/08(土) 00:50:58.02ID:9rj5+JrYM オワコンRubyにしがみつくのはこういう馬鹿ばっか
716デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 00:57:21.53ID:PaQQNn710 言語の終わりを実体験するとかなかなか稀有な例だと思う
717デフォルトの名無しさん (ワッチョイ 2301-UHqe)
2021/05/08(土) 00:59:37.62ID:xzBPi/0q0 VBA使っておいて他の言語をオワコン呼ばわりする権利はないと思うが
Ruby荒らしは前からいるキチだからNGしよう
Ruby荒らしは前からいるキチだからNGしよう
718デフォルトの名無しさん (ワッチョイ be8e-wmZf)
2021/05/08(土) 01:17:43.20ID:xwL6HEYY0719デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 01:46:00.09ID:PaQQNn710 >>718
どれもこう、誰も使わなくなってから「あ、そういやなくなってたんだ〜。D言語(だぶりゅー)なんてあったな〜」程度だけど、
rubyに関してはこの狂信者だか超アンチが一強で荒らし回っていて強制終了させている
終わり目の言語に止めをさすとか、こんなん後にも先にもないだろうw
どれもこう、誰も使わなくなってから「あ、そういやなくなってたんだ〜。D言語(だぶりゅー)なんてあったな〜」程度だけど、
rubyに関してはこの狂信者だか超アンチが一強で荒らし回っていて強制終了させている
終わり目の言語に止めをさすとか、こんなん後にも先にもないだろうw
720デフォルトの名無しさん (ワッチョイ be8e-wmZf)
2021/05/08(土) 05:21:49.11ID:xwL6HEYY0 >>719
そういう意味なら納得
そういう意味なら納得
721デフォルトの名無しさん (アウウィフ FF1f-gUNg)
2021/05/08(土) 08:40:58.17ID:Wz5DhM+2F >>710
ありがとうございます。
ふとした疑問なんですが、基本データベースからの
処理が多い場合は、vbaよりもsql勉強した方がいいのでしょうか。
今vbaを一生懸命勉強している最中ですが、効率の悪いのかなって思ってしまって
ありがとうございます。
ふとした疑問なんですが、基本データベースからの
処理が多い場合は、vbaよりもsql勉強した方がいいのでしょうか。
今vbaを一生懸命勉強している最中ですが、効率の悪いのかなって思ってしまって
722デフォルトの名無しさん (ワッチョイ 2ae6-YEtS)
2021/05/08(土) 08:47:24.17ID:YWSmrfQq0 Excel Access使うならVBAは必須
データベース使うならSQLは必須
当たり前のことですね
データベース使うならSQLは必須
当たり前のことですね
723デフォルトの名無しさん (ワントンキン MMda-1ORs)
2021/05/08(土) 09:07:14.40ID:L4NnuIXtM 何するにしてもVBAは別に必須ではない
データ処理やプログラミングをするほぼ全ての人にとってSQLは必須
データ処理やプログラミングをするほぼ全ての人にとってSQLは必須
724デフォルトの名無しさん (アウウィフ FF1f-gUNg)
2021/05/08(土) 09:40:04.43ID:Wz5DhM+2F 初歩的な質問ばかりですみませんでした(-_-;)
私自身パソコンが苦手なので、せめてvbaを身に着けようと思いましたが・・・
vba sql どちらも難しそうですネ
私自身パソコンが苦手なので、せめてvbaを身に着けようと思いましたが・・・
vba sql どちらも難しそうですネ
725デフォルトの名無しさん (ワッチョイ 6a4f-sv8/)
2021/05/08(土) 09:58:17.60ID:Z/jAVLJW0 >>721
>ふとした疑問なんですが、基本データベースからの
>処理が多い場合は、vbaよりもsql勉強した方がいいのでしょうか。
それはそうなんだけど
あくまで俺の場合はだけど
SQLをまともに勉強した記憶がない。
まぁ必要にかられたとき
必要な分だけ調べて覚えれば
基本部分は十分追いつけるものって
ことなんだろうな
>ふとした疑問なんですが、基本データベースからの
>処理が多い場合は、vbaよりもsql勉強した方がいいのでしょうか。
それはそうなんだけど
あくまで俺の場合はだけど
SQLをまともに勉強した記憶がない。
まぁ必要にかられたとき
必要な分だけ調べて覚えれば
基本部分は十分追いつけるものって
ことなんだろうな
726デフォルトの名無しさん (アウウィフ FF1f-gUNg)
2021/05/08(土) 10:18:13.28ID:Wz5DhM+2F vbaってどれくらいできたら、まあまあ使える人になりますか"(-""-)"
私は下のやつでもう混乱しています・・・これは基本なんですかね?
Sub ()
Dim i As Long
Dim ixR As Long
Dim ixC As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets("練習15")
Set ws2 = Worksheets("練習15_回答")
ws2.Range("A1").CurrentRegion.Offset(1, 1).ClearContents
With ws1
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
ixC = 2
Do Until ws2.Cells(1, ixC) = .Cells(i, 1)
ixC = ixC + 1
Loop
ixR = 2
Do Until ws2.Cells(ixR, 1) = .Cells(i, 2)
ixR = ixR + 1
Loop
ws2.Cells(ixR, ixC) = ws2.Cells(ixR, ixC) + .Cells(i, 3)
Next
End With
End Sub
私は下のやつでもう混乱しています・・・これは基本なんですかね?
Sub ()
Dim i As Long
Dim ixR As Long
Dim ixC As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets("練習15")
Set ws2 = Worksheets("練習15_回答")
ws2.Range("A1").CurrentRegion.Offset(1, 1).ClearContents
With ws1
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
ixC = 2
Do Until ws2.Cells(1, ixC) = .Cells(i, 1)
ixC = ixC + 1
Loop
ixR = 2
Do Until ws2.Cells(ixR, 1) = .Cells(i, 2)
ixR = ixR + 1
Loop
ws2.Cells(ixR, ixC) = ws2.Cells(ixR, ixC) + .Cells(i, 3)
Next
End With
End Sub
727デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 10:19:00.10ID:PaQQNn710 >>724
事務作業で死ぬほど役に立つのはvba。事務だけじゃなく営業でもちょっとした所で使えるなら、事務作業はほぼゼロになるだろう
sqlは使うべき時が来れば、その時に勉強すれば良い。その時に使うのはselectとjoinのはずだ
事務作業で死ぬほど役に立つのはvba。事務だけじゃなく営業でもちょっとした所で使えるなら、事務作業はほぼゼロになるだろう
sqlは使うべき時が来れば、その時に勉強すれば良い。その時に使うのはselectとjoinのはずだ
728デフォルトの名無しさん (アウウィフ FF1f-gUNg)
2021/05/08(土) 10:23:23.79ID:Wz5DhM+2F >>727
なりほど( *´艸`)
私は事務ですけど、正直vbaもsqlも使わなくても力技でどうにかなってきました。
関数とピポットで・・・
でも時短でvbaしようと思ってやってるんですが、どっちがいいか正直よくわかってません。
勉強しないと
なりほど( *´艸`)
私は事務ですけど、正直vbaもsqlも使わなくても力技でどうにかなってきました。
関数とピポットで・・・
でも時短でvbaしようと思ってやってるんですが、どっちがいいか正直よくわかってません。
勉強しないと
729デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 10:23:26.16ID:PaQQNn710 >>726
読みづらいし色々詰め込みすぎ。個人的にも使わないものが多い
・宣言(dim〜)
・with
・do until
はそうそう使わない
>For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
も
>最終行=Cells(.Rows.Count, 1).End(xlUp).Row
>For i = 2 To .最終行
と分けたほうが読みやすい
for、if、setが使えれば大体良いと思う
読みづらいし色々詰め込みすぎ。個人的にも使わないものが多い
・宣言(dim〜)
・with
・do until
はそうそう使わない
>For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
も
>最終行=Cells(.Rows.Count, 1).End(xlUp).Row
>For i = 2 To .最終行
と分けたほうが読みやすい
for、if、setが使えれば大体良いと思う
730デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 10:25:26.96ID:PaQQNn710 >>728
毎回同じピボットを作っているなら、ピボットをvbaでボタン一つで作ってみるとか
普段やってることを自動化するとすぐに覚えられるよ
※ただ、ピボットマクロはかなり大変なのマクロの記録を全力で使ったほうが良い
毎回同じピボットを作っているなら、ピボットをvbaでボタン一つで作ってみるとか
普段やってることを自動化するとすぐに覚えられるよ
※ただ、ピボットマクロはかなり大変なのマクロの記録を全力で使ったほうが良い
731デフォルトの名無しさん (テテンテンテン MMe6-1ORs)
2021/05/08(土) 10:25:49.52ID:7sae8zS6M 質問者は現に今使うべき時に来ているのに何を言っているのか
実際SQLで一瞬でできることを知らないままVBAで>>726みたいな暗号を延々血反吐吐きながら垂れ流してる可哀想なVBAerは多いし、質問者もここでSQLを使えと言われていなければそうなっていただろう
SQLはVBAよりずっと簡単だから、あまりVBAを使い込む前にSQLは一通りやった方がいい
実際SQLで一瞬でできることを知らないままVBAで>>726みたいな暗号を延々血反吐吐きながら垂れ流してる可哀想なVBAerは多いし、質問者もここでSQLを使えと言われていなければそうなっていただろう
SQLはVBAよりずっと簡単だから、あまりVBAを使い込む前にSQLは一通りやった方がいい
732デフォルトの名無しさん (アウウィフ FF1f-gUNg)
2021/05/08(土) 10:26:05.17ID:Wz5DhM+2F733デフォルトの名無しさん (アウウィフ FF1f-gUNg)
2021/05/08(土) 10:29:56.46ID:Wz5DhM+2F734デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 10:30:50.49ID:PaQQNn710735デフォルトの名無しさん (ワッチョイ 7eda-jjtP)
2021/05/08(土) 11:21:40.14ID:SHLAkmOY0 前から気になっていたんだけどセルを1つ選んで右クリックして挿入や削除するときのメニューで
セルの削除なのに「ファイルの削除」って表示されるの俺だけ?
セルの削除なのに「ファイルの削除」って表示されるの俺だけ?
736デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 11:36:39.10ID:PaQQNn710 >>735
yes
yes
737デフォルトの名無しさん (ワッチョイ 6a01-wt3T)
2021/05/08(土) 11:50:01.75ID:zkiV4DEW0 >>732
> 私が使ってるサイトdimは全部に使ってました・・・
それで正しい
今時コードの先頭にOption Explicitが入ってないサイトは無視していいレベル
ID:PaQQNn710はレベルの低いドヤ顔爺だから話半分に受け流しておけばいい
> 私が使ってるサイトdimは全部に使ってました・・・
それで正しい
今時コードの先頭にOption Explicitが入ってないサイトは無視していいレベル
ID:PaQQNn710はレベルの低いドヤ顔爺だから話半分に受け流しておけばいい
738デフォルトの名無しさん (ブーイモ MMd6-gxHo)
2021/05/08(土) 12:39:16.21ID:wIqzNMvOM ここはドヤ顔爺の巣窟ですよ。
子供は他所で遊んだ方が良いですよ。
子供は他所で遊んだ方が良いですよ。
739デフォルトの名無しさん (ワッチョイ 2301-gUNg)
2021/05/08(土) 13:17:27.11ID:SUb7u/UA0 私の勉強方法が合っているのか分からなくなってきました( *´艸`)
740デフォルトの名無しさん (ワッチョイ 2301-gUNg)
2021/05/08(土) 13:18:27.12ID:SUb7u/UA0 ID変わっちゃったけどdimのモノです・・・
741デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 13:36:12.98ID:75Tkj6otd >>740
dimもwithもdo untilも安心して使っていいよ
ただ必ずしも関数の最初にdimをまとめておく必要はないのでiとかは必要になったときに宣言するのでも大丈夫
あとws1みたいな連番の変数よりは目的を具体的に表した変数名の方が良い
dimもwithもdo untilも安心して使っていいよ
ただ必ずしも関数の最初にdimをまとめておく必要はないのでiとかは必要になったときに宣言するのでも大丈夫
あとws1みたいな連番の変数よりは目的を具体的に表した変数名の方が良い
742デフォルトの名無しさん (ワッチョイ 2301-gUNg)
2021/05/08(土) 13:49:53.06ID:SUb7u/UA0743デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 14:01:23.31ID:75Tkj6otd >>742
綺麗か綺麗でないかって尺度だとなんともだけど丁寧に書こうとしてるのは伝わるので応援したい
パフォーマンスとか考えるともう少し良くできそうなのと、個人的には関数を小さく分けた方が見通しが良くなるかもしれない(ちょっと曖昧な表現になってすまない)
綺麗か綺麗でないかって尺度だとなんともだけど丁寧に書こうとしてるのは伝わるので応援したい
パフォーマンスとか考えるともう少し良くできそうなのと、個人的には関数を小さく分けた方が見通しが良くなるかもしれない(ちょっと曖昧な表現になってすまない)
744デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 14:50:38.57ID:PaQQNn710 俺ならこうなるかなぁ
ただ書いてて思ったけど、index(match(),match())で済むような?
Sub () foo
Set 元シート = Worksheets("練習15")
Set 転記先シート = Worksheets("練習15_回答")
転記先シート.Range("A1:B2").ClearContents
For i = 2 To 元シート.Cells(元シート.Rows.Count, 1).End(xlUp).Row
転記列 = 2
Do Until 転記先シート.Cells(1, 転記列) = 元シート.Cells(i, 1)
転記列 = 転記列 + 1
Loop
転記行 = 2
Do Until 転記先シート.Cells(転記行, 1) = 元シート.Cells(i, 2)
転記行 = 転記行 + 1
Loop
転記先シート.Cells(転記行, 転記列) = 転記先シート.Cells(転記行, 転記列) + 元シート.Cells(i, 3)
Next
End Sub
ただ書いてて思ったけど、index(match(),match())で済むような?
Sub () foo
Set 元シート = Worksheets("練習15")
Set 転記先シート = Worksheets("練習15_回答")
転記先シート.Range("A1:B2").ClearContents
For i = 2 To 元シート.Cells(元シート.Rows.Count, 1).End(xlUp).Row
転記列 = 2
Do Until 転記先シート.Cells(1, 転記列) = 元シート.Cells(i, 1)
転記列 = 転記列 + 1
Loop
転記行 = 2
Do Until 転記先シート.Cells(転記行, 1) = 元シート.Cells(i, 2)
転記行 = 転記行 + 1
Loop
転記先シート.Cells(転記行, 転記列) = 転記先シート.Cells(転記行, 転記列) + 元シート.Cells(i, 3)
Next
End Sub
745デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 14:53:21.72ID:PaQQNn710 間違えた、こうか
Sub () foo
Set 元シート = Worksheets("練習15")
Set 転記先シート = Worksheets("練習15_回答")
転記先シート.Range("A1:B2").ClearContents
For i = 2 To 元シート.Cells(元シート.Rows.Count, 1).End(xlUp).Row
列 = 2
Do Until 転記先シート.Cells(1, 列) = 元シート.Cells(i, 1)
列 = 列 + 1
Loop
行 = 2
Do Until 転記先シート.Cells(行, 1) = 元シート.Cells(i, 2)
行 = 行 + 1
Loop
転記先シート.Cells(行, 列) = 転記先シート.Cells(行, 列) + 元シート.Cells(i, 3)
Next
End Sub
>742
慣れてない感じは凄い伝わる
コードは後で見直してすぐに内容が分かるように書いたほうが良い。コメントを入れまくるんだ
Sub () foo
Set 元シート = Worksheets("練習15")
Set 転記先シート = Worksheets("練習15_回答")
転記先シート.Range("A1:B2").ClearContents
For i = 2 To 元シート.Cells(元シート.Rows.Count, 1).End(xlUp).Row
列 = 2
Do Until 転記先シート.Cells(1, 列) = 元シート.Cells(i, 1)
列 = 列 + 1
Loop
行 = 2
Do Until 転記先シート.Cells(行, 1) = 元シート.Cells(i, 2)
行 = 行 + 1
Loop
転記先シート.Cells(行, 列) = 転記先シート.Cells(行, 列) + 元シート.Cells(i, 3)
Next
End Sub
>742
慣れてない感じは凄い伝わる
コードは後で見直してすぐに内容が分かるように書いたほうが良い。コメントを入れまくるんだ
746デフォルトの名無しさん (ワッチョイ 2301-gUNg)
2021/05/08(土) 15:03:51.26ID:SUb7u/UA0 みなさんご丁寧にありがとうございます_(._.)_
vbaを使う人はみなさん頭がいいですね・・・自信ないなーww
sql含めてやってみます。。
vbaを使う人はみなさん頭がいいですね・・・自信ないなーww
sql含めてやってみます。。
747デフォルトの名無しさん (ワッチョイ 6a01-wt3T)
2021/05/08(土) 15:07:11.21ID:zkiV4DEW0748デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 15:13:57.96ID:75Tkj6otd 入れまくれってのは程度にもよるけど読み返すときの手がかりとしてのコメントは残しておいた方がいい
749デフォルトの名無しさん (ワッチョイ be8e-gIfd)
2021/05/08(土) 15:16:34.30ID:xwL6HEYY0 ID変える、しつこく何度も質問する、わざとらしいへりくだり
いつものあいつだろうが
いつものあいつだろうが
750デフォルトの名無しさん (ワッチョイ 2301-gUNg)
2021/05/08(土) 15:26:39.50ID:SUb7u/UA0751デフォルトの名無しさん (ワッチョイ beb0-V+d8)
2021/05/08(土) 17:03:41.13ID:6tENHryO0 >>729
VB6の開発プロジェクトやってたけど
どのソースコードでもdimもwithもdo untilも当然のように使ってたぞ
お前が使わないってだけじゃないの?
あとOption Explicitつけないのはバグの原因になるから推奨できない。
VB6の開発プロジェクトやってたけど
どのソースコードでもdimもwithもdo untilも当然のように使ってたぞ
お前が使わないってだけじゃないの?
あとOption Explicitつけないのはバグの原因になるから推奨できない。
752デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 18:11:49.59ID:jYvDj1vcd VBScript(WSH)はDimないし使わないのも自然だけどVBAはありがたくOption ExplicitもDimも使うな
753デフォルトの名無しさん (ワッチョイ 9f5f-Fl7F)
2021/05/08(土) 18:14:06.32ID:IhtMBIEH0 俺は変数宣言するけどoption付けない事も多いな
自分だけのちょんプロとか
自分だけのちょんプロとか
754デフォルトの名無しさん (スッップ Sd8a-HO9V)
2021/05/08(土) 19:23:35.24ID:vdqKmiMMd >>750
この文章でモロバレ
この文章でモロバレ
755デフォルトの名無しさん (ワッチョイ 0b2f-C7Xb)
2021/05/08(土) 20:01:04.28ID:+76Iryda0 With使わないのは、C#に採用されなかったように最近の流れだからまあいい
Doも、ループはWhileに統一しろってルールならまあいい
Dim使わんってどういうことだ?
まさか変数の宣言しないってことじゃないよな
Option Explicitなんて自分で書くことまずないが、真っ先に変更するオプションじゃないのか
Doも、ループはWhileに統一しろってルールならまあいい
Dim使わんってどういうことだ?
まさか変数の宣言しないってことじゃないよな
Option Explicitなんて自分で書くことまずないが、真っ先に変更するオプションじゃないのか
756デフォルトの名無しさん (ワッチョイ ca3d-ZHNQ)
2021/05/08(土) 20:07:27.25ID:cJeFkg/00 変数の宣言しないと型違いのエラーとか検知しづらくなるし、
コードの中で比較が出てきた時に自作関数の結果か変数の値かどっちと比較してるのかわかりづらくなったり…
とにかく色々エラー回避とかメンテナンス性とか考えて変数宣言しないのはナシよりのナシかと
コードの中で比較が出てきた時に自作関数の結果か変数の値かどっちと比較してるのかわかりづらくなったり…
とにかく色々エラー回避とかメンテナンス性とか考えて変数宣言しないのはナシよりのナシかと
757デフォルトの名無しさん (JP 0H97-jjtP)
2021/05/08(土) 20:35:45.94ID:QG+os5rrH 基礎ができてなくて、型の使い分けがわからなくて全部Variantで書いてる人
758デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 21:04:16.49ID:PaQQNn710 >>755
しない
以下でエラーが起きないって時点で俺はアホらしくなって宣言をやめた
Sub foo()
Dim a As String
Dim b As Long
a = "1"
b = 2
Debug.Print a + b '3が出るぞ良かったな
End Sub
しない
以下でエラーが起きないって時点で俺はアホらしくなって宣言をやめた
Sub foo()
Dim a As String
Dim b As Long
a = "1"
b = 2
Debug.Print a + b '3が出るぞ良かったな
End Sub
759デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 21:06:38.67ID:PaQQNn710 宣言しないと何ができなくなるのか、何を間違えるのかが分からん
760デフォルトの名無しさん (ワッチョイ beb0-V+d8)
2021/05/08(土) 21:30:00.76ID:6tENHryO0 >>758
それは暗黙の型変換が行われるから。
変数の宣言をしたほうがいいのは以下のような場合にエラーにできるから。
public sub foo()
hensu = 1
Debug.Print hansu + 1
end sub
2が出力されることを期待しているが、この場合1が出力される。(変数名の打ち間違い)
それは暗黙の型変換が行われるから。
変数の宣言をしたほうがいいのは以下のような場合にエラーにできるから。
public sub foo()
hensu = 1
Debug.Print hansu + 1
end sub
2が出力されることを期待しているが、この場合1が出力される。(変数名の打ち間違い)
761デフォルトの名無しさん (ワッチョイ beb0-V+d8)
2021/05/08(土) 21:36:40.65ID:6tENHryO0 VB6やVBAは型が弱いので、変数名の先頭にintやlng、str等をつけてデータ型がわかるようにするのが一般的だと思ってる。
この場合だと
Dim intHensu As Integer
の宣言を入れておくべき。
この場合だと
Dim intHensu As Integer
の宣言を入れておくべき。
762デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 21:37:56.47ID:PaQQNn710763デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 21:39:48.07ID:PaQQNn710 >>761
変数名見れば何入ってるか分からないか?
変数名見れば何入ってるか分からないか?
764デフォルトの名無しさん (ワッチョイ beb0-V+d8)
2021/05/08(土) 21:43:37.13ID:6tENHryO0 >>763
ごめん一般的といったのは、自分がそう思ってただけなので、実際はそうじゃないかも。
ごめん一般的といったのは、自分がそう思ってただけなので、実際はそうじゃないかも。
765デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 21:45:17.15ID:jYvDj1vcd 何でもかんでもVariant型だと余計にメモリ食ったり速度面で劣るんじゃなかったっけか
766デフォルトの名無しさん (JP 0H97-jjtP)
2021/05/08(土) 21:52:57.44ID:QG+os5rrH 簡単なマクロならメモリも速度もほとんど気にしなくていい
そういうのが気になってきてから速くする方法を勉強してもいいと思う
そういうのが気になってきてから速くする方法を勉強してもいいと思う
767デフォルトの名無しさん (ワッチョイ ca3d-wPc9)
2021/05/08(土) 21:55:44.85ID:cJeFkg/00 文字列 String
整数 Long
小数以下も必要 Single
日付 Date
Setが必要なもの Object
なんでも Variant
初心者ならこれくらいの使い分け出来てたら十分だから宣言はして
整数 Long
小数以下も必要 Single
日付 Date
Setが必要なもの Object
なんでも Variant
初心者ならこれくらいの使い分け出来てたら十分だから宣言はして
768デフォルトの名無しさん (アウアウウー Sa1f-ymZB)
2021/05/08(土) 21:57:26.01ID:L/dDaofga 大量のデータをがばっと取るときはsql
とってきたデータをチマチマ加工したいときはVBA
二刀流がべだー
とってきたデータをチマチマ加工したいときはVBA
二刀流がべだー
769デフォルトの名無しさん (アウアウウー Sa1f-ymZB)
2021/05/08(土) 22:02:54.21ID:L/dDaofga 変数宣言でいちばん重要なのは
パブリック変数なのか
プライベート変数なのかだよ
型はそんなに気にしなくてよいから
3文字以下ならプライベート、パブリックなら5文字以上にする
パブリック変数なのか
プライベート変数なのかだよ
型はそんなに気にしなくてよいから
3文字以下ならプライベート、パブリックなら5文字以上にする
770デフォルトの名無しさん (ワッチョイ 6a4f-sv8/)
2021/05/08(土) 22:18:22.12ID:Z/jAVLJW0 >>769
いや、そもそも
外部とのやり取りはプロパティで行わないと
ブレイクポイント等仕掛けて
どこから呼ばれたか分かり辛くなることを考えると
変数をPublicで宣言する機会はまず無くなるだろう。
もちろんこのプロパティと言うのは概念的なものを含めて
Javaの様に関数と同じ様に設定することも含めるけど。
そうすればパブリック、プライベートの
判断のために変数名の考慮を行う必要も無くなる。
良かったな。
いや、そもそも
外部とのやり取りはプロパティで行わないと
ブレイクポイント等仕掛けて
どこから呼ばれたか分かり辛くなることを考えると
変数をPublicで宣言する機会はまず無くなるだろう。
もちろんこのプロパティと言うのは概念的なものを含めて
Javaの様に関数と同じ様に設定することも含めるけど。
そうすればパブリック、プライベートの
判断のために変数名の考慮を行う必要も無くなる。
良かったな。
771デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/08(土) 22:31:52.03ID:PaQQNn710772デフォルトの名無しさん (ワッチョイ 0b2f-C7Xb)
2021/05/08(土) 23:54:10.02ID:+76Iryda0773デフォルトの名無しさん (ワッチョイ 6bac-91/Y)
2021/05/09(日) 00:48:39.55ID:vQpWnC+C0774デフォルトの名無しさん (ワッチョイ 7eda-K+t/)
2021/05/09(日) 01:41:49.82ID:SiihAWPs0 variantにすると型間違いでエラーがでないので
やはり推奨できない
やはり推奨できない
775デフォルトの名無しさん (ワッチョイ 2e02-X9JK)
2021/05/09(日) 02:15:37.67ID:vzYu7ze/0 知恵を貸してください
ある可変長2次元配列のデータについて
各列のデータから1つずつ抽出した文字列の組み合わせを出力したいと考えています
例えばArray(2,2)のデータが以下だとします
Array(0,0)="いちご"
Array(0,1)="みかん"
Array(0,2)=""
Array(1,0)="あまい"
Array(1,1)="すっぱい"
Array(1,2)="にがい"
Array(2,0)="100円"
Array(2,1)="200円"
Array(2,2)=""
この場合
「いちご,あまい,100円」「いちご,あまい,200円」「みかん,すっぱい,100円」
などの
空白を除く2*3*2=12通りの組み合わせ全てを抽出したいのです
(抽出先はシートでも配列でも何でも良いです)
そして実際にはこの配列をArray(x,y)とすると
xとyは1以上の自然数で不定です
配列の行数が固定長であれば各行において行の数だけFor文でループの中にループを入れれば良いのでしょうが
配列の行数が1以上の不定数の場合にどうすれば良いか思い付きません
vbaというよりアルゴリズムの問題かも知れませんが
良い方法はあるのでしょうか
ある可変長2次元配列のデータについて
各列のデータから1つずつ抽出した文字列の組み合わせを出力したいと考えています
例えばArray(2,2)のデータが以下だとします
Array(0,0)="いちご"
Array(0,1)="みかん"
Array(0,2)=""
Array(1,0)="あまい"
Array(1,1)="すっぱい"
Array(1,2)="にがい"
Array(2,0)="100円"
Array(2,1)="200円"
Array(2,2)=""
この場合
「いちご,あまい,100円」「いちご,あまい,200円」「みかん,すっぱい,100円」
などの
空白を除く2*3*2=12通りの組み合わせ全てを抽出したいのです
(抽出先はシートでも配列でも何でも良いです)
そして実際にはこの配列をArray(x,y)とすると
xとyは1以上の自然数で不定です
配列の行数が固定長であれば各行において行の数だけFor文でループの中にループを入れれば良いのでしょうが
配列の行数が1以上の不定数の場合にどうすれば良いか思い付きません
vbaというよりアルゴリズムの問題かも知れませんが
良い方法はあるのでしょうか
776デフォルトの名無しさん (ワッチョイ be8e-gIfd)
2021/05/09(日) 02:26:22.29ID:qbmXU1K50 はい、いつものあいつ
777デフォルトの名無しさん (ワッチョイ eada-K+t/)
2021/05/09(日) 04:53:38.03ID:yBvaHslb0778デフォルトの名無しさん (ワッチョイ 9f5f-c52j)
2021/05/09(日) 06:11:50.07ID:Gu7b6Am40 相手しない相手しない
779デフォルトの名無しさん (アウアウウー Sa1f-ymZB)
2021/05/09(日) 08:20:21.39ID:nRlrfZeFa ワークシートをグローバル変数みたいなつかい方をする
うむ、よくある
うむ、よくある
780デフォルトの名無しさん (ワッチョイ beb0-V+d8)
2021/05/09(日) 09:19:54.62ID:TBZcO69u0 uboundで現在の配列の最大要素番号調べて、そこまでループとかじゃないの?
そもそも配列なんて自分はあんまり使わない。redim preserveって確かかなり遅かった気がする。
そもそも配列なんて自分はあんまり使わない。redim preserveって確かかなり遅かった気がする。
781デフォルトの名無しさん (ブーイモ MMd6-O8Br)
2021/05/09(日) 09:44:03.47ID:1mWvM4p1M ReDim Preserveは1番ケツの次元しか可変に出来ねぇのがとても残念
782デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/09(日) 09:48:20.73ID:HdQWbOvH0 >>775
Sub foo()
Dim array1() As String
ReDim Preserve array1(3, 3)
array1(0, 0) = "いちご"
array1(0, 1) = "みかん"
array1(0, 2) = ""
array1(1, 0) = "あまい"
array1(1, 1) = "すっぱい"
array1(1, 2) = "にがい"
array1(2, 0) = "100円"
array1(2, 1) = "200円"
array1(2, 2) = ""
For Each dim1 In array1
If dim1 <> "" Then
Debug.Print dim1
End If
Next
End Sub
vbaの動的配列は本当にめんどくさいな
Sub foo()
Dim array1() As String
ReDim Preserve array1(3, 3)
array1(0, 0) = "いちご"
array1(0, 1) = "みかん"
array1(0, 2) = ""
array1(1, 0) = "あまい"
array1(1, 1) = "すっぱい"
array1(1, 2) = "にがい"
array1(2, 0) = "100円"
array1(2, 1) = "200円"
array1(2, 2) = ""
For Each dim1 In array1
If dim1 <> "" Then
Debug.Print dim1
End If
Next
End Sub
vbaの動的配列は本当にめんどくさいな
783デフォルトの名無しさん (JP 0H97-jjtP)
2021/05/09(日) 10:05:56.73ID:Nzaho5/SH 行数、列数はUBound関数で調べられる
2次元配列の場合は
UBound(array1, 1)
UBound(array1, 2)
で、それぞれの次元の大きさが取得できる
2番目のパラメータが対象となる次元
あと、多次元配列に一気に代入するにはarray関数を次元と同じ数だけ入れ子にする方法がある
array1 = Array( _
Array("いちご", "みかん", ""), _
Array("あまい", "すっぱい", "にがい"), _
Array("100円", "200円", ""))
2次元配列の場合は
UBound(array1, 1)
UBound(array1, 2)
で、それぞれの次元の大きさが取得できる
2番目のパラメータが対象となる次元
あと、多次元配列に一気に代入するにはarray関数を次元と同じ数だけ入れ子にする方法がある
array1 = Array( _
Array("いちご", "みかん", ""), _
Array("あまい", "すっぱい", "にがい"), _
Array("100円", "200円", ""))
784デフォルトの名無しさん (ワッチョイ 2e02-X9JK)
2021/05/09(日) 10:13:55.83ID:vzYu7ze/0 ありがとうございます
ReDim Preserveの配列再定義は知っているのですが
例えば>>782のようだと
「いちご」
「みかん」
「あまい」
……
「200円」
のような2+3+2の7個出力されるだけですよね
「いちご,あまい,100円」
「いちご,あまい,200円」
「いちご,すっぱい,100円」
……
「みかん,にがい,200円」
のような2*3*2の12個を出力したいのです
行数が固定なら例えばArray(2,x)のように列数が不定でも
For i=0 To UBound Array(0,x)
For j=0 To UBound Array(1,x)
For k=0 To UBound Array(2,x)
Debug.Print Array(0,i)& "," & Array(1,i)& "," & Array(2,i)
Next
Next
Next
のようにして空白部分の例外処理を適当に入れれば良いのは分かりますが
行数が不定なので分からないというお話です
ReDim Preserveの配列再定義は知っているのですが
例えば>>782のようだと
「いちご」
「みかん」
「あまい」
……
「200円」
のような2+3+2の7個出力されるだけですよね
「いちご,あまい,100円」
「いちご,あまい,200円」
「いちご,すっぱい,100円」
……
「みかん,にがい,200円」
のような2*3*2の12個を出力したいのです
行数が固定なら例えばArray(2,x)のように列数が不定でも
For i=0 To UBound Array(0,x)
For j=0 To UBound Array(1,x)
For k=0 To UBound Array(2,x)
Debug.Print Array(0,i)& "," & Array(1,i)& "," & Array(2,i)
Next
Next
Next
のようにして空白部分の例外処理を適当に入れれば良いのは分かりますが
行数が不定なので分からないというお話です
785デフォルトの名無しさん (JP 0H97-jjtP)
2021/05/09(日) 10:14:00.97ID:Nzaho5/SH >>775
2次元配列の要素数が不明の場合こういう書き方もできる
For i = 0 To UBound(array1)
For j = 0 To UBound(array1(i))
Debug.Print array1(i)(j)
Next j
Next i
2次元配列の要素数が不明の場合こういう書き方もできる
For i = 0 To UBound(array1)
For j = 0 To UBound(array1(i))
Debug.Print array1(i)(j)
Next j
Next i
786デフォルトの名無しさん (ワッチョイ 8f68-fceI)
2021/05/09(日) 10:14:31.62ID:HdQWbOvH0 >>782は全然違うわ、スマン
787デフォルトの名無しさん (JP 0H97-jjtP)
2021/05/09(日) 10:50:20.26ID:Nzaho5/SH■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
