1 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 22:08:43.71 ID:jtngtgXU0.net] !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
654 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 09:38:04.66 ID:CaKZkb7J0.net] >>646 レベルアップしたよ。その経験は無駄にはなってないよ
655 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 10:04:42.11 ID:nWfClEZV0.net] Private Sub Worksheet_Change(ByVal Target As Range) If _ Target.Address <> "$C$2" _ Or (IsNumeric(Target)) _ Then Exit Sub End If main = Cells(1, 3).Value main2 = Cells(2, 3).Value If (Int(main) - (main)) = 0 Then Sheets("DB").Cells(2, 3) = main Else Sheets("DB").Cells(2, 3) = Int(main2) End If End Sub
656 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 10:54:54.17 ID:nWfClEZV0.net] Private Sub Worksheet_Change(ByVal Target As Range) 1つ目 If _ Target.Address <> "$C$2" _ Or (IsNumeric(Target)) _ Then Exit Sub End If main = Cells(1, 3).Value main2 = Cells(2, 3).Value If (Int(main) - (main)) = 0 Then Sheets("DB").Cells(2, 3) = main Else Sheets("DB").Cells(2, 3) = Int(main2) End If End Sub 2つ目 If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub Columns("d").ClearContents Application.EnableEvents = False 日付1 = DateSerial(Range("A1"), Range("B1"), Range("C1")) 日付2 = DateSerial(Range("A2"), Range("B2"), Range("C2")) For 日付 = 日付1 To 日付2 r = r + 1 Cells(r, "D") = 日付 Next Application.EnableEvents = True End Sub 一つ目と二つ目を合わせるにはどうしたらいいでしょうか? 前にも質問してググってみたのですが今の私のレベルでは手に負えなくて困ってます ご教授ください
657 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 10:58:18.12 ID:CaKZkb7J0.net] >>653 前も見た気がするけど、結局何をやりたいのか分からん 最初から最後までやりたいことを通して書いてくれ
658 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:08:55.56 ID:4t234ePa0.net] この人教えるには金貰わなきゃ割に合わないくらいめんどい
659 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:10:46.24 ID:nWfClEZV0.net] すみません! A B C D 1 2021 1 1 1/1 2 2021 1 5 1/2 1/3 1/4 1/5 ↑のようにDateが入った表で 1/1と1/5までの日付をD列に表示したいです もし2/4から2/6なら
660 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:12:17.39 ID:nWfClEZV0.net] すみません! A B C D 1 2021 1 1 1/1 2 2021 1 5 1/2 1/3 1/4 1/5 ↑のようにDateが入った表で 1/1と1/5までの日付をD列に表示したいです もし2/4から2/6なら2/4、2/5、2/6を
661 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:15:04.54 ID:nWfClEZV0.net] A B C D 1 2021 1 1 1/1 2 2021 1 5 1/2 1/3 1/4 1/5 ↑のようにDateが入った表で 1/1と1/5までの日付をD列に表示したいです もし2/4から2/6なら2/4、2/5、2/6をD列に表示したいです もしC2に数字以外の文字等が入った場合はC1の数字をC2に来るように出来るでしょうか?
662 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:16:11.30 ID:nWfClEZV0.net] 間違えて 何回も連投してしまいました すみません
663 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:31:02.17 ID:nWfClEZV0.net] >>655 わたしみたいな初心者にはレベル高すぎですよね もう少しググって勉強してみます
664 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 13:52:36.59 ID:DQe3j4Yqa.net] うむ 他人に説明するときは5w1hがきほん だいぶよくなったよな
665 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:24:16.43 ID:zgzGcqkdH.net] 質問とソースの両方見ても判定条件がよくわからん 超エスパーすると、数字が5個か6個入ってたらスタートか?
666 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:29:49.98 ID:CaKZkb7J0.net] >>656 数式じゃダメなの? 数式だと3分で出来たけど D1=DATE(A1,B1,C1) D2=IF(DATE($A$2,$B$2,$C$2)<($D1+1),"",$D1+1) D2を下にオートフィル
667 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:33:33.57 ID:Dw+PnwkB0.net] Ruby なら、 require 'csv' require 'date' input = <<"EOT" year,month,day 2021,5,31 2021,6,2 EOT options = { :headers => true } # ヘッダー有り csv_ary = CSV.parse( input, options ) tmp_from = csv_ary[ 0 ] tmp_to = csv_ary[ 1 ] from_day = Date.new( tmp_from[ 0 ].to_i, tmp_from[ 1 ].to_i, tmp_from[ 2 ].to_i ) to_day = Date.new( tmp_to[ 0 ].to_i, tmp_to[ 1 ].to_i, tmp_to[ 2 ].to_i ) Range.new( from_day, to_day ).each{ |day| puts day } 出力 2021-05-31 2021-06-01 2021-06-02
668 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:39:31.63 ID:Peytj0fp0.net] >>664 スレ違い
669 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:45:18.78 ID:CaKZkb7J0.net] >>664 Rubyとか消滅しそうな言語で書いてどうしたいの? https://s3-ap-northeast-1.amazonaws.com/samurai-blog-media/blog/wp-content/uploads/2019/05/66e291d220430021c308db2399680990.jpg
670 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:50:07.30 ID:tepg5eqrM.net] >>666 プログラム板に常駐してるキチガイ知らないの?
671 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:52:08.71 ID:CaKZkb7J0.net] >>667 知らないわ 別言語のスレとかそんなに見ない
672 名前:デフォルトの名無しさん [2021/05/05(水) 15:01:03.66 ID:CAyVZDxB0.net] そもそもいつものあいつだし
673 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 16:38:09.75 ID:nWfClEZV0.net] みなさんを混乱させてしまいまして もうしわけありません
674 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 20:02:01.88 ID:mEvPZJoP0.net] VB6やVB.NetでVBA用のDLLビルドしてるんだけど、 DLL側のクラスのメンバ構成に変更加えてリビルドしたら、それを参照しているVBAのプロジェクト側で、いちいちDLL参照解除→DLL再参照を手作業でやらんとアカンの? 面倒くさいんやけど。 って、これまでの流れ見たら、スレチな質問になるんかな。
675 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:06:37.83 ID:XLRqwo1W0.net] DLLてデルルでいいの?
676 名前:デフォルトの名無しさん [2021/05/05(水) 22:10:12.24 ID:TYeLzB6b0.net] ダリラ
677 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:14:38.02 ID:CaKZkb7J0.net] >>672 「ダイナミックリンクライブラリ」 昔はドゥルルって勝手に読んでたな
678 名前: mailto:sage [2021/05/05(水) 22:15:56.49 ID:tRoHSHAj0.net] ドロロ
679 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:23:14.23 ID:mEvPZJoP0.net] 質問した俺が間違っていた。
680 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:29:51.86 ID:XLRqwo1W0.net] 「質問した俺が間違っていた」 つまりこれをSOM、読み方はデルル
681 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 23:07:25.23 ID:gm6jmmXW0.net] >>671 VB6とかしらんが COMだよな?ID変わらん限り参照設定変える必要ないと思ったが ちゃんとレジストリに登録されてないんじゃね
682 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 06:00:24.75 ID:fowE0ZYM0.net] >>678 レジストリには間違いなく登録してる。 例えばVB.Netで実装するDLL側で、公開するクラスのメンバ関数を一つ増やしてリビルドすると、それを参照しているVBA(Excel)実行時にエラーが出る。VBAプロジェクトのコンパイルもできなくなる。 この時、DLL参照設定解除→DLL再参照をやると正常に読み込まれる。 なお上の例では、VB.Net実装のDLL側で増やしたクラスのメンバ関数を消去して元に戻した上で再リビルドすると、DLL参照設定解除→DLL再参照をしなくても、再びDLLが正常に読み込まれる模様w。
683 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 12:12:28.40 ID:EE3pjJQ7a.net] >>663 おー、美しいな Rubyの人は>>665-666 みたいな声に全く耳を貸さずに延々と書いてる方で、このスレでもたまに見るのよ ほとんど荒らしだから話しかけても無駄。丁重に無視して差し上げるのを推奨します
684 名前:デフォルトの名無しさん [2021/05/06(木) 17:15:18.35 ID:YSpOci5b0.net] 質問です 下記のように重複している項目を除いて合計値を算出するコードを教えてください。 調べたところ連想配列?を使えば良いと書いておりましたが、難しくて使い方がよくわかりませんでした・・・ 素人すぎて申し訳ないですが、宜しくお願いします。 https://i.imgur.com/xJ71PFz.png
685 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 17:31:33.29 ID:5qdpVrsh0.net] >>679 軽く試したけど再現しない たぶん、タイプライブラリの変えてはいけない何か(DispIdが怪しい)が変わってると思われ これ以上はVB.Netのスレ行け
686 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 18:29:38.21 ID:jNBg/veuM.net] >>681 SUMIFで良いじゃんと思ったけど重複は除くのか面倒くせぇな 配列にA〜Cのデータを代入するだろ? 4列目にりんごなら1、みかんなら2を頭に付けてCのデータを連結した上で数値化して放り込むだろ? そしたら For RowCnt = LBound(TgtAry, 1) to UBound(TgtAry, 1) For RowCtR = Ubound(TgTAry, 1) to RowCnt If TgtAry(RowCnt, UBound(TgtAry, 2)) > TgtAry(RowCtR, UBound(TgtAry, 2)) Then SavAry([略]) = TgtAry(RowCnt, [略]) TgtAry(RowCnt, [略]) = TgtAry(RowCtR, [略]) TgtAry(RowCtR,[略]) = SavAry([略]) [省略] End If Next Next みたいな事をやって配列をソートしてやるだろ? あとは上から順に見ていけば4列目を無視しても重複が弾けるんじゃねぇかな?
687 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 18:48:02.86 ID:2oPZ0CXkF.net] 連想配列だと練習問題みたいな課題やね set ## = createobject("scripting.dictionary") set @@ = createobject("scripting.dictionary") for r = 2 to cells(rows.count, 1).end(xlup).row if not ##.exists(cells(r, 1).value & cells(r, 2).value) then ##.add cells(r, 1).value & cells(r, 2).value @@(cells(r, 1).value) = @@(cells(r, 1).value) + cells(r, 3).value end if next r for each key in @@ rr = rr + 1 cells(rr + 1 , 5) = key cells(rr + 1, 6) = @@(key) next key 今スマホだから試せてないけど、こんな感じでどうだべ?
688 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 19:08:24.28 ID:fowE0ZYM0.net] >>682 検証、ありがと。しかし、再現ならずか。 >>679 の書き込みは、一応、直前に確認してから書き込んだ。 こちらでは、管理者権限でVB.Netを立ち上げて、ビルド時にDLL登録してる。 あと>>679 で試しに追加するメンバ関数は最後じゃなく、真ん中あたり(property getブロックとsubブロックの間)に追加している。 ところで、みんな、汎用の俺俺ライブラリをDLL化しないのか。
689 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 19:14:13.18 ID:95uMi6p80.net] >>681 俺ならわざわざVBA書かずに関数追加してピボットテーブルで集計するけど。 https://i.imgur.com/LwvzJns.png
690 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 19:40:05.49 ID:VTnVqyux0.net] キーは若干不安なので =A2&"_"&B2&"_"&C2 ぐらいにはした方が良いと思う
691 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 20:15:22.86 ID:b7Mkjg0R0.net] >>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] ]
692 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 20:23:53.60 ID:95uMi6p80.net] >>687 なるべく簡潔に書きたくて、そのリスクは無視したw 実際は間に何か挟んだほうがいいね。
693 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 21:11:34.82 ID:VTnVqyux0.net] >>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
694 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 21:12:21.95 ID:VTnVqyux0.net] すまん、"com"は"会社名"、"v"は"値段"などに適宜書き換えてくれ
695 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 22:14:14.24 ID:zoaLFLbx0.net] D列に =COUNTIF(B$2:B2,B2) 数値合計に =SUMIFS($C$2:$C$9,$A$2:$A$9,"=" & E2,$D$2:$D$9,"=1")
696 名前:デフォルトの名無しさん [2021/05/06(木) 23:20:33.75 ID:srB+AETb0.net] >>681 しつこい
697 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 04:04:27.47 ID:UcyGqCZa0.net] いまだにIFとISERROR組み合わせてエラー回避やってる人いるんだ。。。??
698 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 04:24:40.54 ID:f/k3XSIv0.net] 流石にいまだにVBA使ってるニキの煽りは違うなw
699 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 06:55:01.06 ID:sJ3lVRb90.net]
700 名前:iferrorはエラーの場合の値の置き換えでは? [] [ここ壊れてます]
701 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 07:20:54.57 ID:tuSKe1qQ0.net] booleanで取りたい場合はIFとISERROR組み合わせた方が早い
702 名前:デフォルトの名無しさん [2021/05/07(金) 07:26:43.31 ID:DloXWpsH0.net] Excelのセルって、Accessで言うところのコントロールの OldValue プロパティってないの? Application.Undo以外で更新前の値に戻すときに使いたいんだけど
703 名前:デフォルトの名無しさん [2021/05/07(金) 08:26:31.62 ID:EfOHcgmKM.net] 見りゃわかることをいちいち聞くな
704 名前:デフォルトの名無しさん [2021/05/07(金) 09:36:16.79 ID:dif1qALr0.net] 教えてください データベースから取得した大量のデータを、他のシートに簡潔集計したいです。 生データシートには 文字列としてyy(2021)mm(03)をはじめ、メーカ、注文番号、数量、ナンバー、大分類、中分類、小分類など68列に渡ってあります。 理想としては別シートに月別に メーカ、大分類、中分類、小分類(ピポット的配置のイメージ)で購入金額、数量を降順で出したいです。 メーカや分類名は多く、都度新しいのが出たりするので、メンテナンスなくして自動で出せるようにしたいです。 どうすればいいでしょうか。
705 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 09:51:31.13 ID:/bDSijiLM.net] >>700 DBに入ってるんだったらSQLで最初からgroup byしたらいいだけ
706 名前:デフォルトの名無しさん [2021/05/07(金) 10:21:13.76 ID:dif1qALr0.net] >>701 すみません、>>700 が最終形態ではなく、これができたら私のイメージのモノができるのでお聞きしました。 なのでvbaで回答頂けたら助かります<(_ _)>
707 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 10:44:31.42 ID:uFptLScD0.net] >>702 VBAの中でシートに対してSQL投げて 結果のRecordsetをシートに貼り付けるだけでは?
708 名前:デフォルトの名無しさん [2021/05/07(金) 10:49:59.41 ID:dif1qALr0.net] >>703 すみません。 私がSQLを理解していないので、正直わかりません。 何か分かりやすいサイト等あったら教えてもらえますか?
709 名前:デフォルトの名無しさん [2021/05/07(金) 11:55:04.67 ID:Uq/dH8v/M.net] またいつものあいつか
710 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 12:02:29.78 ID:W+W51fKCa.net] ここの諸先輩方にとってSQLってどういう位置付け? 常識レベル?
711 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 12:10:39.55 ID:Gobk7VPl0.net] 手足と同じレベル
712 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 12:13:21.02 ID:/bDSijiLM.net] >>704 DBがあるんだったらそれをメンテしてる人間もいるだろ? そいつに聞け
713 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 15:40:07.47 ID:1tkbLq7p0.net] DeBu
714 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 19:08:51.24 ID:uFptLScD0.net] >>704 EXCELでどういうObject使ってシートにSQLを投げるかはVBA シート Sql 辺りでググればいくらでも出てくるけどとりあえず一例としてここかな www7b.biglobe.ne.jp/~whitetiger/ex/ex2002088.html SQLがどういうものかは流石に SQL 入門 辺りでググってくれ 今は使ってないとしても本来VBAと同等かそれ以上の優先順位で覚えるべきものだから絶対覚えておいた方がいい。
715 名前:デフォルトの名無しさん [2021/05/07(金) 20:08:21.87 ID:xGNvq5Jp0.net] なぜインプロセスだかアウトプロレスだかの話を入れたのかがわからないな
716 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 21:41:30.83 ID:Z7WMK8Ny0.net] Ruby on Rails は、MVC(model/view/controller)モデルだから、 最初から、3大データベース(SQLite/MySQL/PostgreSQL)を使う 入門レベル
717 名前:デフォルトの名無しさん [2021/05/07(金) 22:30:42.79 ID:hSzgOaHp0.net] >>712 MVCだから?馬鹿は黙ってろよ
718 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 00:33:08.33 ID:H8oTRyi2d.net] >>712 ちょっと何言ってるのかわからない
719 名前:デフォルトの名無しさん [2021/05/08(土) 00:50:58.02 ID:9rj5+JrYM.net] オワコンRubyにしがみつくのはこういう馬鹿ばっか
720 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 00:57:21.53 ID:PaQQNn710.net] 言語の終わりを実体験するとかなかなか稀有な例だと思う
721 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 00:59:37.62 ID:xzBPi/0q0.net] VBA使っておいて他の言語をオワコン呼ばわりする権利はないと思うが Ruby荒らしは前からいるキチだからNGしよう
722 名前:デフォルトの名無しさん [2021/05/08(土) 01:17:43.20 ID:xwL6HEYY0.net] >>716 は?馬鹿なの? DelphiとかADAとかSmallTalkとかたくさんあるだろ
723 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 01:46:00.09 ID:PaQQNn710.net] >>718 どれもこう、誰も使わなくなってから「あ、そういやなくなってたんだ〜。D言語(だぶりゅー)なんてあったな〜」程度だけど、 rubyに関してはこの狂信者だか超アンチが一強で荒らし回っていて強制終了させている 終わり目の言語に止めをさすとか、こんなん後にも先にもないだろうw
724 名前:デフォルトの名無しさん [2021/05/08(土) 05:21:49.11 ID:xwL6HEYY0.net] >>719 そういう意味なら納得
725 名前:デフォルトの名無しさん [2021/05/08(土) 08:40:58.17 ID:Wz5DhM+2F.net] >>710 ありがとうございます。 ふとした疑問なんですが、基本データベースからの 処理が多い場合は、vbaよりもsql勉強した方がいいのでしょうか。 今vbaを一生懸命勉強している最中ですが、効率の悪いのかなって思ってしまって
726 名前:デフォルトの名無しさん [2021/05/08(土) 08:47:24.17 ID:YWSmrfQq0.net] Excel Access使うならVBAは必須 データベース使うならSQLは必須 当たり前のことですね
727 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 09:07:14.40 ID:L4NnuIXtM.net] 何するにしてもVBAは別に必須ではない データ処理やプログラミングをするほぼ全ての人にとってSQLは必須
728 名前:デフォルトの名無しさん [2021/05/08(土) 09:40:04.43 ID:Wz5DhM+2F.net] 初歩的な質問ばかりですみませんでした(-_-;) 私自身パソコンが苦手なので、せめてvbaを身に着けようと思いましたが・・・ vba sql どちらも難しそうですネ
729 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 09:58:17.60 ID:Z/jAVLJW0.net] >>721 >ふとした疑問なんですが、基本データベースからの >処理が多い場合は、vbaよりもsql勉強した方がいいのでしょうか。 それはそうなんだけど あくまで俺の場合はだけど SQLをまともに勉強した記憶がない。 まぁ必要にかられたとき 必要な分だけ調べて覚えれば 基本部分は十分追いつけるものって ことなんだろうな
730 名前:デフォルトの名無しさん [2021/05/08(土) 10:18:13.28 ID:Wz5DhM+2F.net] 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
731 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:19:00.10 ID:PaQQNn710.net] >>724 事務作業で死ぬほど役に立つのはvba。事務だけじゃなく営業でもちょっとした所で使えるなら、事務作業はほぼゼロになるだろう sqlは使うべき時が来れば、その時に勉強すれば良い。その時に使うのはselectとjoinのはずだ
732 名前:デフォルトの名無しさん [2021/05/08(土) 10:23:23.79 ID:Wz5DhM+2F.net] >>727 なりほど( *´艸`) 私は事務ですけど、正直vbaもsqlも使わなくても力技でどうにかなってきました。 関数とピポットで・・・ でも時短でvbaしようと思ってやってるんですが、どっちがいいか正直よくわかってません。 勉強しないと
733 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:23:26.16 ID:PaQQNn710.net] >>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が使えれば大体良いと思う
734 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:25:26.96 ID:PaQQNn710.net] >>728 毎回同じピボットを作っているなら、ピボットをvbaでボタン一つで作ってみるとか 普段やってることを自動化するとすぐに覚えられるよ ※ただ、ピボットマクロはかなり大変なのマクロの記録を全力で使ったほうが良い
735 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:25:49.52 ID:7sae8zS6M.net] 質問者は現に今使うべき時に来ているのに何を言っているのか 実際SQLで一瞬でできることを知らないままVBAで>>726 みたいな暗号を延々血反吐吐きながら垂れ流してる可哀想なVBAerは多いし、質問者もここでSQLを使えと言われていなければそうなっていただろう SQLはVBAよりずっと簡単だから、あまりVBAを使い込む前にSQLは一通りやった方がいい
736 名前:デフォルトの名無しさん [2021/05/08(土) 10:26:05.17 ID:Wz5DhM+2F.net] >>729 そうなんですか!? 私が使ってるサイトdimは全部に使ってました・・・ すごいショック😢
737 名前:デフォルトの名無しさん [2021/05/08(土) 10:29:56.46 ID:Wz5DhM+2F.net] >>731 vbaを反吐がでるまで打とうと思ってました 私文系で詳しくないから、みなさん数を打って覚えているのかと・・・ 一度sqlについて調べてみます。ありがとうございます。
738 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:30:50.49 ID:PaQQNn710.net] あぁ、確かに一回は触っておいた方がいいか >>732 どっちでもいいよ 宣言なんて間違えないため+メモリ節約のためだけど、 今はメモリが潤沢にあるし宣言を書きに頭に戻るとかアホらしいし余計に間違うわ
739 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 11:21:40.14 ID:SHLAkmOY0.net] 前から気になっていたんだけどセルを1つ選んで右クリックして挿入や削除するときのメニューで セルの削除なのに「ファイルの削除」って表示されるの俺だけ?
740 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 11:36:39.10 ID:PaQQNn710.net] >>735 yes
741 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 11:50:01.75 ID:zkiV4DEW0.net] >>732 > 私が使ってるサイトdimは全部に使ってました・・・ それで正しい 今時コードの先頭にOption Explicitが入ってないサイトは無視していいレベル ID:PaQQNn710はレベルの低いドヤ顔爺だから話半分に受け流しておけばいい
742 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 12:39:16.21 ID:wIqzNMvOM.net] ここはドヤ顔爺の巣窟ですよ。 子供は他所で遊んだ方が良いですよ。
743 名前:デフォルトの名無しさん [2021/05/08(土) 13:17:27.11 ID:SUb7u/UA0.net] 私の勉強方法が合っているのか分からなくなってきました( *´艸`)
744 名前:デフォルトの名無しさん [2021/05/08(土) 13:18:27.12 ID:SUb7u/UA0.net] ID変わっちゃったけどdimのモノです・・・
745 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 13:36:12.98 ID:75Tkj6otd.net] >>740 dimもwithもdo untilも安心して使っていいよ ただ必ずしも関数の最初にdimをまとめておく必要はないのでiとかは必要になったときに宣言するのでも大丈夫 あとws1みたいな連番の変数よりは目的を具体的に表した変数名の方が良い
746 名前:デフォルトの名無しさん [2021/05/08(土) 13:49:53.06 ID:SUb7u/UA0.net] >>741 ありがとうございます。 粛々とがんばります・・・ 実際>>726 は綺麗ではないんですかね?
747 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 14:01:23.31 ID:75Tkj6otd.net] >>742 綺麗か綺麗でないかって尺度だとなんともだけど丁寧に書こうとしてるのは伝わるので応援したい パフォーマンスとか考えるともう少し良くできそうなのと、個人的には関数を小さく分けた方が見通しが良くなるかもしれない(ちょっと曖昧な表現になってすまない)
748 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 14:50:38.57 ID:PaQQNn710.net] 俺ならこうなるかなぁ ただ書いてて思ったけど、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
749 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 14:53:21.72 ID:PaQQNn710.net] 間違えた、こうか 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 慣れてない感じは凄い伝わる コードは後で見直してすぐに内容が分かるように書いたほうが良い。コメントを入れまくるんだ
750 名前:デフォルトの名無しさん [2021/05/08(土) 15:03:51.26 ID:SUb7u/UA0.net] みなさんご丁寧にありがとうございます_(._.)_ vbaを使う人はみなさん頭がいいですね・・・自信ないなーww sql含めてやってみます。。
751 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 15:07:11.21 ID:zkiV4DEW0.net] >>742 Do Until 〜 Loop は他の言語だとあまり見ないから条件逆にして While 〜 WEnd の方が馴染みのある人が多いっていうぐらいの話 あとコメント入れまくれとか言う老害は無視していい >>745 そこまでやるなら i じゃ無くて 転記元行 とかにしろよ
752 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 15:13:57.96 ID:75Tkj6otd.net] 入れまくれってのは程度にもよるけど読み返すときの手がかりとしてのコメントは残しておいた方がいい
753 名前:デフォルトの名無しさん [2021/05/08(土) 15:16:34.30 ID:xwL6HEYY0.net] ID変える、しつこく何度も質問する、わざとらしいへりくだり いつものあいつだろうが
754 名前:デフォルトの名無しさん [2021/05/08(土) 15:26:39.50 ID:SUb7u/UA0.net] >>749 すみません、誰のことを指しているか分かりませんが、私はあなたの想像している人ではありませんよ。 vbaで悩んでて、質問掲示板ってあったので使わせてもらっただけです。