1 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 08:42:15.37 ID:KskL7bEXd.net] !extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part70 https://mevius.5ch.net/test/read.cgi/tech/1616072923/ Excel VBA 質問スレ Part71 https://mevius.5ch.net/test/read.cgi/tech/1621914481/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
669 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 11:34:50.96 ID:O3Ip+Qo9M.net] なんで?
670 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 12:05:27.22 ID:ZUCCF//La.net] 目がアーモンドになる
671 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 12:37:46.09 ID:XzPbf7xa0.net] >>664 一般的ではないですよね
672 名前:デフォルトの名無しさん [2021/08/28(土) 13:21:54.79 ID:GacscTPG0.net] 今時エクセルで請求書を作る会社って
673 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 13:26:28.47 ID:XzPbf7xa0.net] >>669 なにでつくるの? Accessは古すぎたしファイルメーカーは高すぎであきらめた 売上額月に600万程度だからExcelでも十分なんだよね
674 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 13:29:02.28 ID:Wn50/Mou0.net] 今時〇〇ってとか言うアホはスルーでいいよ
675 名前:デフォルトの名無しさん [2021/08/28(土) 13:34:29.23 ID:d2Jh3olLM.net] >>671 こういう馬鹿こそスルーだろ 請求書発行ソフトとか販売管理とか沢山あるだろ
676 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 13:41:02.22 ID:y1FEzj5CM.net] と、馬鹿が申しております。
677 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 13:41:56.34 ID:YRitmpAVd.net] >>672 市販のあわないだろ
678 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 13:50:09.98 ID:+T8TIHFV0.net] なんでそこで経理ソフトって出てこないんだろう・・・
679 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:11:22.66 ID:Wn50/Mou0.net] >>672 Excelで間に合ってるならそれでええやん 外野が何言ってんだかって感じ
680 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:15:33.19 ID:OUVKMoF10.net] まあ間に合ってるってならエクセルでいいけど シェイプで線引くような帳票が間に合ってるといえるのか 俺なら罫線で間に合わせるけどな
681 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:39:40.62 ID:nfIYqgR90.net] EXCEL帳票って多いよね 請求書に限らず
682 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:43:17.47 ID:EKyvlYlFd.net] うちみたいな零細は帳票の枚数も少ないしExcelに罫線で十分なんだワ 専用ソフトは従業員が2桁人数になってからだな
683 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:50:21.30 ID:+T8TIHFV0.net] 請求書の罫線にこだわるって何の意味があるんだろうと思う
684 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 16:39:25.21 ID:XzPbf7xa0.net] >>680 ぶっといの気にならない? 単なる美的センス的なこだわりだからとくに意味はないんだけどね ぶっとい枠線だらけの表とかみるとデザインセンスというか旧時代的な印象うけてしまう
685 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 16:40:04.12 ID:XzPbf7xa0.net] >>677 Excelで0.75とかひければ問題ないんですけどね
686 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 16:49:11.38 ID:clAN9KQWM.net] そもそも罫線レイアウトが旧時代的だよ
687 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 17:01:08.85 ID:Wn50/Mou0.net] >>681 さすがに旧時代的な印象だからって理由だったなら なぜExcelで?ってなるぞw
688 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 17:03:13.47 ID:XzPbf7xa0.net] >>683 でも印刷だと最低限は必要じゃない? 数十行ならんでるととくに 交互に色変えるのはモノクロやプリンタによって大きくかわるからねえ
689 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 17:04:05.90 ID:XzPbf7xa0.net] >>684 線以外は不満ない Accessも線選べないから細い四角をかいてならべてる
690 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 17:15:47.71 ID:6AjG+XmcM.net] そこまで帳票にこだわるならCrystal Reportsとか使えばいいのに https://www.sap.com/japan/products/crystal-visual-studio.html
691 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 17:21:15.10 ID:W6iJhC5F0.net] >>687 クリスタルレポート、アクティブレポート、PDFも別言語では使うけどEXCEL使う場合も多いからやっぱり抑えておくべきだよ。 特にここ、EXCEL VBAのスレだし。
692 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 17:23:01.48 ID:XzPbf7xa0.net] >>687 >>688 はじめて聞きましたが世界標準なんですね 日本語ではあまり情報がないみたいですね
693 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 17:27:11.56 ID:W6iJhC5F0.net] >>689 今は特に気にしなくていいよ。 そもそもVBAから使ったことないから VBAから使えるか分からんし。
694 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 19:16:34.16 ID:6UyriYnia.net] VBA使って作るぐらいだから大げさなものではないと思うから正直なところ明細の罫線はなくてもかまわないのではと思う 罫線信仰については日本は細かいと思うわ それなら偶数行の背景に薄いグレーの背景色をつけたほうがきれいに見えるかと
695 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 19:21:46.63 ID:P0+dXebs0.net] 帳票とかでも罫線レイアウトしてるのはただ単に四角く収まってるだけで別に使いやすくともなんともないんだよな 項目の意味より見た目の収まりでレイアウトしてるから意味不明だし書き込むスペースが足りなかったりするし
696 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 19:22:16.12 ID:XzPbf7xa0.net] >>691 モノクロレーザーだと濃淡でないのでスクリーントーンみたいになるんですよね これみてたけど線があったりなかったり色付きだったり なんか世界的な基準とかあるんですかね? https://i.imgur.com/GQyzXam.jpg
697 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 19:51:56.00 ID:6UyriYnia.net] どんなプリンタ使ってるか不明だけど印刷品質とかでモノクロレーザーでもそれなりな背景色つけられると思うから プリンタ側の設定みなおしてみたほうがよいのでは 基準なんて別にないでしょ作り手(提供者)のセンスだけかと
698 名前:デフォルトの名無しさん [2021/08/28(土) 20:04:28.62 ID:qSiuLs4Ta.net] 濃いグレーと薄いグレーがどう印刷されるかな
699 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 20:16:48.82 ID:k0s+jeSJH.net] Excelの設定でも解像度が指定できるしモノクロレーザーの設定でも濃度や網点の細かさぐらい変更できるのに
700 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 20:45:50.31 ID:XzPbf7xa0.net] >>696 300dpiだと文字がガタガタ 600dpiだと一番細いとされる点線が印刷されませんね
701 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 10:34:22.30 ID:7BYV+8iF0.net] 任意のセルを選択(飛び地あり)→数式の入っているセル全て値貼り付けしたくて作成しました 動くのですが100万を超えるデータで動かすと1分以上かかってしまいます 2次元配列?を使えば高速化できますか 配列は使ったことがなく説明を読んでも難しく混乱していしまいました よろしくお願いします Dim Sc As Range Application.Calculation = xlManual Selection.SpecialCells(xlCellTypeFormulas, 23).Select For Each Sc In Selection Sc.Value = Sc.Value Next Sc …
702 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 10:45:24.11 ID:lED3Ocwo0.net] >>698 selectionしなければ早くなるかも Sub Macro2() Application.Calculation = xlManual For Each Sc In Selection.SpecialCells(xlCellTypeConstants, 23) Sc.Value = 5 Next Sc End Sub
703 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 10:45:44.98 ID:HK4nM9G2a.net] >>698 Selectionは極力使わない方がいい 数式の入ったCellsをUnionしていって、最後にUnion範囲に対して値貼り付けすれば?
704 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 10:46:46.41 ID:lED3Ocwo0.net] 違った、こうか Sub Macro2() Application.Calculation = xlManual For Each Sc In Selection.SpecialCells(xlCellTypeConstants, 23) Sc.Value = Sc.Value Next Sc End Sub しかし選択してるのは定数なのに、valueをvalueにするの? あんまり意味ない気がするんだけど
705 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 11:23:08.03 ID:7BYV+8iF0.net] >>701 ありがとうございます 試してみます コピペを繰り返すより代入した方が早い、と出たので上記のようになりました Range一辺倒だったのでUnionも調べてみます
706 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 11:34:43.22 ID:IYYa0ToFM.net] >>698 > Selection.SpecialCells(xlCellTypeFormulas, 23).Select >>701 > For Each Sc In Selection.SpecialCells(xlCellTypeConstants, 23) > しかし選択してるのは定数なのに、valueをvalueにするの? > あんまり意味ない気がするんだけど …
707 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 12:40:07.80 ID:TcEoTH9E0.net] >>698 数式セルだけに限定しないで 全部貼り付けちゃえばいいんじゃないの Sub Macro3() Dim temp() temp = Selection Selection = temp End Sub
708 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:20:16.41 ID:TcEoTH9E0.net] >>698 あー選択が飛び地か 飛び地のRangeを順に取得する関数ってあったっけ 思いつかないので以下のように修正版。 splecialcellsを使う必要がない気がするが尊重して入れておいた // Sub Macro4() Application.Calculation = xlManual Application.ScreenUpdating = False myAddress = Split(Selection.SpecialCells(xlCellTypeFormulas, 23).Address, ",") Dim temp() For Each EE In myAddress temp = Range(EE) Range(EE) = temp Next End Sub
709 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:22:53.01 ID:FZqboG1a0.net] >>704 ひとつずつ処理するよりもこういう考え方が正しい
710 名前:698 mailto:sage [2021/08/29(日) 13:24:14.88 ID:7BYV+8iF0.net] 698です 色々と案をありがとうございます >>701 は構文エラーとなってしまいました たしかにSelectionを使わなければ早くなりそうではあるのですが… またUnionでまとめる方法は飛び地がなければ良さそうですが、左に詰めて貼り付けされてしまい欲しい結果が得られませんでした >>704 こちらも隣接セルのみであれば問題なさそうなのですが複数セルだと1番左の列は問題ないものの他のセルが元データとは異なるデータがペーストされてしまいました 私の理解不足であれば申し訳ありません ちなみに列選択をした際に少しでもループを減らしたかったため数式セルに限定してみただけなので選択部分まとめてでも問題ありません
711 名前:698 mailto:sage [2021/08/29(日) 13:25:52.00 ID:7BYV+8iF0.net] >>705 更新せず書き込みすみません 試してみます
712 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:34:12.51 ID:lED3Ocwo0.net] >>701 だけどスマン、間違えてた上にすげーアホなことやってたわ >>698 >任意のセルを選択(飛び地あり)→数式の入っているセル全て値貼り付けしたくて作成しました Sub tgggMacro2() Range("a1:z100").Value = Range("a1:z100").Value End Sub これでアカンのか ※cells.valueだとメモリ不足になる
713 名前:698 mailto:sage [2021/08/29(日) 18:40:28.03 ID:7BYV+8iF0.net] >>705 試してみました 成功する時と途中でオブジェクトの型が一致しない、とエラーになる場合があるようです 配列を理解できておらず、なぜエラーになるのか解決策にたどり着けていません 単独セルを選択している箇所でエラーになるように思います 実際に使用する際は1セルだけを選択することはまずないとは思うのですが… >>709 せっかく書いていただいたのですが求めている内容ではなさそうです 全て代入していいならほんとラクなんですけどね
714 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 19:03:27.49 ID:FZqboG1a0.net] >>710 数式セルを値貼り付けするならなんで709じゃだめなん?
715 名前:698 mailto:sage [2021/08/29(日) 19:06:25.69 ID:7BYV+8iF0.net] >>711 対象のセルはファイルによって異なりますが数式をあえて残すセルもあります シート内の計算結果を全て値にしたい訳ではないのです
716 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 19:29:10.08 ID:sPGAkNt40.net] 後だしぃ
717 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 19:29:59.26 ID:sl9xswiTM.net] rangeを配列に格納 配列内で特定セルに該当する部分を値に書き換えて 一気に貼り付ける
718 名前:698 mailto:sage [2021/08/29(日) 19:35:54.89 ID:7BYV+8iF0.net] え…始めから飛び地ありの任意セルを選択した状態って書いてあるのに後出しと言われましても…
719 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 19:50:08.61 ID:lED3Ocwo0.net] >>698 恐らくこれが一番早いと思います 飛び地で値でコピーペーストはできないし、 配列はしんどい Sub Macro2() Application.Calculation = xlCalculationManual ' 手動計算にする Application.ScreenUpdating = False ' 描画を停止する For Each Sc In Selection.SpecialCells(xlCellTypeFormulas, 23) Sc.Value = Sc.Value Next Sc Application.Calculation = xlCalculationAutomatic ' 自動計算にする Application.ScreenUpdating = True ' 描画を再開する End Sub >>711 要は ・選択部分を値にするマクロが欲しい ・値にする部分はフォーマットによって変わる ※社内で様々なフォーマットがあり、今はそれぞれを作り込む暇がないので「選択+値化」で逃がしている という事なのだろう >>714 飛び地ありで配列にうまく入れる方法ってあるのかな
720 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 19:58:18.50 ID:1aCvHSMxH.net] ワークシート→配列は無関係なセルも一気に読み込んで、書き戻す時は1個ずつにしてもそこそこスピードアップできそうな気がする
721 名前:705 mailto:sage [2021/08/29(日) 21:48:01.74 ID:TcEoTH9E0.net] >>710 もう手間のかかる子だなぁw Sub Macro5() Application.Calculation = xlManual Application.ScreenUpdating = False myAddress = Split(Selection.SpecialCells(xlCellTypeFormulas, 23).Address, ",") Dim temp() For Each EE In myAddress If Range(EE).Count = 1 Then Range(EE).Value = Range(EE).Value Else temp = Range(EE) Range(EE) = temp End If Next Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub 100万を超えるデータで動かすと何秒で終わるか教えてね
722 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 22:34:44.25 ID:lED3Ocwo0.net] >>718 横だけど Dim temp() temp = Range(EE) Range(EE) = temp これは Range(EE).value =Range(EE).value じゃダメなの?
723 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 22:40:30.11 ID:zuaG9uH70.net] 最後にそもそも値貼付けする理由がないとかいうオチが待ってそうだな
724 名前:705 mailto:sage [2021/08/29(日) 23:13:06.85 ID:TcEoTH9E0.net] >>719 あ!ほんとだ 配列という言葉にこだわっちゃって無駄なことをしてたねw Sub Macro6() Application.Calculation = xlManual Application.ScreenUpdating = False myAddress = Split(Selection.SpecialCells(xlCellTypeFormulas, 23).Address, ",") For Each EE In myAddress Range(EE).Value = Range(EE).Value Next Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub
725 名前:705 mailto:sage [2021/08/29(日) 23:18:37.19 ID:TcEoTH9E0.net] そのそもrelaxtoolsとかになかったっけw 確認してないけど
726 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 23:53:07.29 ID:V4lHBgfX0.net] エクセルVBAが、現在最も重宝される言語だってのはわかるし 自分も随分それで助けられてるんだけど、その次に学ぶべきなのは なんなんだろう。 VBA自体が終わった言語なのは明らかだし・・・。 JavaScript ? Rust? その他?
727 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 00:31:07.88 ID:ckBh8waKH.net] >>723 言語は手段、重要なのは目的 何をやりたいかで選べ たとえばスマホアプリを作りたいならJava
728 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 00:36:33.71 ID:HHMxmKKh0.net] VBAが必要な理由てさ、元データがExcelだから これ以上でもこれ以下でもないよね そしてそれはこれからも変わらないもの
729 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 07:18:10.56 ID:lQLq+TuC0.net] >>723 js: ブラウザのコンソールに入力or拡張機能が非常に強力 web関連では大体なんでも出来る ただ言語の仕様が色々と特殊 php: webサーバー作りたいならこれ 本格運用しようとすると、覚える事は非常に多い 特にセキュリティが鬼門 rust: 新機能てんこもりの革新的な言語!は大体廃れる
730 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 08:10:18.19 ID:g9J4xp5m0.net] >>723 VBAを学んだのなら VBA → VB.Net → C# が楽だろう。 VB.Netは文法的にはほぼVBAと一緒だから .Netの構成を覚えることに専念出来る。 VB.Netを覚えてしまえば次はC#だな。 逆に構成がVB.Netと殆ど一緒なので VBA → VB.Net を覚えるときより楽に 覚えることが出来るだろう。 もしWeb系をやりたいなら VBA → ASP.Net(VB) → ASP.Net(C#)と 言ったところか。 自信があるならVBA → C#でも構わないが、 折角だから寄り道してついでにVB.Net覚えて おいても損はないだろう。
731 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 08:17:51.42 ID:g9J4xp5m0.net] JavaScriptはWeb系やるのであれば必須言語だが、これはWebやるときに必要に迫られて変な話だけどやらざるを得なくなって勝手に身につく。 DB扱うのにSQLが必須になるのと同じ。 Rustはまだ扱っている書籍やサイトが少ないのでもう少し待ってからでも良いと思う。
732 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 12:20:59.93 ID:a1GphOXp0.net] >>723 もしかしてVBAしかできない人? 興味があるなら全部やればいいじゃん
733 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 12:52:53.22 ID:4aBvuqYpa.net] 次にって言葉を汲んであげてもいいと思うな サラダ食ったあと次にカレーとデザートどっち食べるべきか聞かれても「興味あるなら全部食え」ってレス付ける?
734 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 13:18:03.24 ID:a1GphOXp0.net] 食いたいもん食えよ 俺なら食いたいもん全部食うけどな
735 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 13:19:04.91 ID:a1GphOXp0.net] そもそも興味があるのにやらないでいるこ理由がわからない
736 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 13:29:28.16 ID:qdrPJ241M.net] ズラがずれてるぞ
737 名前: [] [ここ壊れてます]
738 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 13:37:49.06 ID:ckBh8waKH.net] 今は個別の言語の文法よりも、大量のライブラリにどんな機能があるかを知る方が重要 クラスやAPIをどれだけ知ってるかで作れる物が決まるんで
739 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 13:40:48.19 ID:a1GphOXp0.net] 結局やらないでしょう
740 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 13:43:40.08 ID:txgJXV1kM.net] >>723 GASとかPowerFXとかSalesforceとか VBA上がりなら本格的なプログラミングよりローコードに行ったほうがすぐ役立てられてコスパいいよ
741 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 17:19:00.03 ID:KZUgc5l+a.net] スレチなんでそろそろプログラマ板いってやればいいのでは
742 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 18:03:03.80 ID:SLXKrFaKa.net] HTAのVBScriptでExcel操作って出来ましたっけ?
743 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 20:36:23.51 ID:AiTAdVKh0.net] 2年くらい前にここでお世話になって、会社でもかなりVBA触るポジションができて、かなり成長した (皆さんありがとう) クラスモジュールを触ったことがないんだけど、経験のため触っておいた方がいい? 理解が深まるなら触りたい
744 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 21:34:10.98 ID:PPAHi4pc0.net] エクセルでフィルターがかけられないんですが、 誰か助けてください 1列を指定して並び替えとフィルターを開いてフィルター(F)を押せません。 ちなみに空白業はないのですが、、、
745 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 21:41:22.45 ID:PPAHi4pc0.net] 解決しました
746 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 21:43:52.41 ID:zNy1vYFAM.net] >>738 昔はできた記憶があるけどセキュリティとか厳しくなってるから今でもできるかはよくわからん
747 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 22:40:05.22 ID:mO4hpp7AM.net] >>739 たかがVBAにクラスなんか要らんよ 並のスキルのVBAerにメンテできなくなるから害悪ですらある
748 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 23:22:00.02 ID:g9J4xp5m0.net] >>739 VBAのクラスは継承が使えないから敬遠されがちではあるが、逆に他言語では委譲の知識を疎かにしがちだからやっておいても損はないな。 メソッド名を文字列で指定して呼び出すCallByNameのような命令もクラスでないと使えない気がしたしな。
749 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 23:24:06.07 ID:lQLq+TuC0.net] >>739 vbaのクラスはコンストラクタも継承もない どうせやるなら別言語を勉強するか、 sheetやcellsオブジェクトのメンバやメソッドでも眺めてる方が有意義と思う
750 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 23:52:32.26 ID:g9J4xp5m0.net] >>745 引数が渡せないだけでコンストラクタやデストラクタはあるのでは?
751 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 01:57:49.48 ID:ihx26wcM0.net] >>739 経験の為に触るのなら自宅の個人PCで作るだけにしとけ まず職場で見ることができる全てのExcelVBAのコード眺めてみて、 全てを理解できるようになるのが先
752 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 03:43:06.41 ID:JZqVSHwg0.net] >>739 何でもそうだけど使い処というものがあって、ひょっとしたらその機能を使えばもっと簡潔にコードが書けたり後でテストがし易くなったり、改修がし易くなるかも知れない。 けど、それがどういったものか分からなければ本当に使うべきか、どういった使い方をすべきかも分からない。だからまずそれがどういったものであるかを調べる必要がある。 調べた上で使うべきかどうかは自分で判断すること。 「結局使う必要がないなら無駄足じゃん!!」という結論に行き着くかも知れない。けど調べてついた知識は無駄にはならない。 興味があるのなら何でも調べてみればいい。
753 名前:デフォルトの名無しさん [2021/08/31(火) 05:26:47.90 ID:Bq4JJtE70.net] Googleスプレッドシートに置き換えが進んでいるのにExcelをできるだけ残させるような発想がよくわからない。 マイクロソフト内でも切るべき機能とされているのに。
754 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 06:03:59.14 ID:Ns860ecPM.net] >>749 > Googleスプレッドシートに置き換えが進んでいる > マイクロソフト内でも切るべき機能とされている 妄想でないならソースよろしく
755 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 06:42:25.04 ID:yu36xbaqd.net] >>749 新しい部署や若い会社とかならそうなのかもしれないけど、長続きして規模の大きい会社は大人数がずっとExcel使ってきてる訳だし、今更急にスプレッドシートに切り替えとか出来ないよ マクロなら尚更 VBAからGASに書き換えるのも面倒だし、スクリプトを編集するにもアカウントの権限が必要なせいで他部署へ許諾が必要な職場もあって面倒だったよ
756 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 07:10:44.50 ID:yu36xbaqd.net] >>739 もう運用しているブックについてはクラスモジュールに書き換えなくていいよ 引き継ぎの際にクラスモジュール扱える人が担当になるとは限らないしね ただ、自衛策として1度は扱っておいた方がいいよ 自分が引き継いだブックにクラスモジュールあったりしたら大変だしね。それに折角学ぼうとしてる所だし
757 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 07:11:08.63 ID:i7ARXDZV0.net] VBAやマクロゴリゴリのExcelが社内にない状態が想像できないのだが スプレッドシートって代替できるの?
758 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 07:25:24.78 ID:yu36xbaqd.net] >>753 シート上の編集とかブック内の処理で済むようなマクロならば、スプレッドシートへ移動可能 ただ、サーバからCSVが送られてきて、マクロによってそのCSVを開いてから処理する、とかならば移動が出来てないのが実情かなあ なにせ、Excelで何ら問題なく業務できてるってなら、わざわざサーバやらブックやら仕様を変更してまでスプレッドシートに移すメリットは無いしね。仕様書作り直し、単体、結合テストやり直しとか無駄に工数かかるし。 社全体がスプレッドシートに切り替えるってなら知らん
759 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 08:07:31.43 ID:JZqVSHwg0.net] 変な話だな EXCELをWebで扱うなら 余程金の無い中小企業でも無い限り Office365の企業用ライセンス取得して Web版EXCELに移行するのが 自然な流れだと思うのだが。 もっとも通常はEXCELそのものを Web上でツールとして扱うのも考え辛い。 何故ならEXCELなどよりもっと Wrbでツール作るのに向いた言語が 幾らでもあるからだ。 そういう場合はEXCELはダウンロードされる 1ファイルという立ち位置になるからな。
760 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 10:03:50.16 ID:Kb4xw5qb0.net] With Worksheets("Sheet1") .Columns("1"). Copy Destination_ = ThisWorkbook.Worksheets("Sheet2").Columns("1") Sheet1のA列をSheet2にコピーするマクロを書いたのですが 1004エラーが出てしまいます。 どう直せばいいでしょうか?
761 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 10:11:41.55 ID:7DaXmsNEa.net] >>756 こんな感じでは With Worksheets("Sheet1") .Columns("A:A").Copy Destination:=ThisWorkbook.Worksheets("Sheet2").Columns("A:A") End With
762 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 10:17:59.90 ID:rtPimGdF0.net] Sub TEST1() '「1つ目」のグラフの「1つ目」の系列の「名前」 Debug.Print ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Name End Sub 基本的な質問ですみません グラフに折れ線グラフが10本あって、その内1本をグラフ上で選択している時に 選択している系列名をVBAで取得するにはどう書けばいいでしょうか? あるいはSeriesCollection(1)の1という数字の部分が何なのか取得できますか?
763 名前:デフォルトの名無しさん [2021/08/31(火) 10:34:44.96 ID:RXuTL+ZfF.net] forでまわしてselectedで見る とか
764 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 10:44:19.53 ID:rtPimGdF0.net] >>759 すみませんもう少し詳しく selectedというのはどういう使い方をするんでしょう?
765 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 11:03:21.16 ID:0ik848aIM.net] マクロの記録で見れ
766 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 11:13:09.09 ID:rtPimGdF0.net] これでは以下のエラーが出るのですが どこが間違ってますでしょうか?よろしくお願いします for i = 1 to ActiveChart.SeriesCollection.Count If ActiveChart.SeriesCollection(i).Selected Then beep endif next 実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。
767 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 11:30:45.05 ID:NESsP7iO0.net] >>762 まず、ActiveなChartがあるかを確認 そして、ChartObjectはマクロの記録どおりに動かないことが多いので、ActiveChartの後に.Chartを挿入して試してみる 参考 officetanaka.net/excel/vba/graph/09.htm
768 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 12:01:04.19 ID:7DaXmsNEa.net] >>762 こういうのはどう? Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long) If ElementID = xlSeries Then Debug.Print ActiveChart.SeriesCollection(Arg1).Name End If End Sub
769 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 13:36:21.23 ID:rtPimGdF0.net] >>763 for 文の直後に ActiveChart.SeriesCollection(i).select とすると折れ線グラフは次々と選択されるのでChartはあると思うのですが if文入れるとエラーが出ます・・・ 的外れなこと言ってたらゴメンなさい >>764 検索するとアドイン?のイベントプロシージャになるんでしょうか? かなり調べてみないと自分には理解できないかもしれません・・・ もう少し頑張ってみます
770 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 13:40:47.87 ID:bSK5W0WOM.net] >>765 if文中の selected を select 煮汁
771 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 13:44:13.64 ID:1uDof6e+M.net] ごめんちがう selectedはなさそう
772 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 13:58:00.53 ID:7DaXmsNEa.net] >>765 ブックにグラフのシートがあるならそのシートのChratのSelectってイベントをクリックすると Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long) End sub が生成されるかと それともグラフはワークシートにあるのかな?
773 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 14:04:57.78 ID:rtPimGdF0.net] >>768 そうです、グラフはワークシートにあります
774 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 14:59:11.50 ID:l9psb/TLM.net] >>758 グラフが選択されてるのが確実なら Application.Selection.Name 確実じゃないなら If TypeName(Application.Selection) = "Series" Then ... でガードすればいい
775 名前:デフォルトの名無しさん [2021/08/31(火) 15:12:15.10 ID:rtPimGdF0.net] >>770 有難うございます、取得できました! これで行きたいと思います。ありがとうございました
776 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 15:17:16.32 ID:7DaXmsNEa.net] >>769 最小限しか書いてないので自分で手直ししてほしいけどこんなのはどうでしょう 1.クラスモジュールを追加する 2.クラスモジュールに下記を実装する(チャートのイベントを実装) Public WithEvents myChart As Chart Private Sub myChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long) If ElementID = xlSeries Then Debug.Print myChart.SeriesCollection(Arg1).Name End If End Sub 3.ThisWorkbookに下記を実装する(クラスにチャートを紐づける) Private myClass1 As New Class1 Private Sub Workbook_SheetActivate(ByVal Sh As Object) If ActiveSheet Is Nothing Then Exit Sub End If If ActiveSheet.ChartObjects.Count = 0 Then Exit Sub End If Set myClass1.myChart = ActiveSheet.ChartObjects(1).Chart End Sub
777 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 15:43:05.57 ID:rtPimGdF0.net] >>772 有難うございます!クラスモジュール最近勉強したばかりなので 是非使いこなして活用させて頂きます!ありがとうございました
778 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 15:48:49.52 ID:xY3Kg19k0.net] どうしても分からないので教えて下さい 以下 excel-ubara.com/excelvba4/EXCEL299.html より引用 Option Explicit Public mOnTime As Date Sub TimerProc() Range("A1") = Now() End Sub Sub OnTimeStart() Call TimerProc mOnTime = Now() + TimeSerial(0, 0, 1) Call Application.OnTime(mOnTime, "OnTimeStart") End Sub Sub OnTimeStop() '同一のProcedureとEarliestTimeがないとエラーになる On Error Resume Next Call Application.OnTime(mOnTime, "OnTimeStart", , False) End Sub これを丸ごとコピーして標準モジュールに貼り付けて実行しようとすると 「変数が定義されていません」というコンパイルエラーが出ます どうやら「mOnTime」という変数が反応していないようです 何が原因として考えられるのでしょうか
779 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 16:45:55.34 ID:qfiRyurv0.net] 一番上の option explicit をコメントアウト
780 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 17:08:05.95 ID:0UudHHzs0.net] 悪い方向にいざなってないか。それw
781 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 17:16:59.73 ID:xY3Kg19k0.net] 流石に程度の低い釣りには引っかかりません (自己解決しました)
782 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 19:12:54.95 ID:XB01+IxZa.net] 程度の低いだってさ こんなド素人ちゃんにまで小馬鹿にされるオプション付けない派には流石に同情しちゃうね
783 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 20:04:02.76 ID:xY3Kg19k0.net] ひねくれすぎててワロタ 元々オプションありで書かれているのに オプション外して解決するのは根本的に違うでしょって話 もしかして疲れて病んでる人だったのかな お疲れ様です
784 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 00:14:30.58 ID:LgfjpVVJ0.net] >>757 ありがとうございます。解決しました。 イコールの前にコロンがいるんですね。
785 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 04:40:05.79 ID:vx5cHFWE0.net] ユーザーフォームから A1に数字が入力され B1からB7まで同じく数字が入力され A1が月で、B1からB7を日として C1〜に
786 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 04:48:15.65 ID:vx5cHFWE0.net] ユーザーフォームから A1に数字が入力され B1からB7まで同じく数字が入力され A1が月で、B1〜B7を日として C1〜C7に月日として表示したいのですが A B C D E ・ ・ ・ 1 8 12 8/12 2 13 8/13 3 14 8/14 4 5 ・ ・ ・ 上記、票のようにA1とB列に分割された月日を C列に日付にできるでしょうか? いつも質問ばかりで恐縮ですが ご教授おねがいします
787 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 07:48:40.08 ID:QyYX1GEf0.net] >>782 それぐらいなら関数でいいんじゃねーの =DATE(YEAR(TODAY()),$A$1,B1) 年も入力しないとおかしくなる 「今年」を基準にすると、来年開いたときにデータ変わる
788 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 09:23:39.06 ID:Uj8mUWALM.net] 12月ぐらいに来年の1月のデータを入力しようとして日付だけ入力して今年の1月になっちゃってたってのは割りとあるある
789 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 10:18:49.87 ID:uNhFH8V1d.net] >>783 > >>782 > それぐらいなら関数でいいんじゃねーの > =DATE(YEAR(TODAY()),$A$1,B1) > > 年も入力しないとおかしくなる > 「今年」を基準にすると、来年開いたときにデータ変わる ご教授ありがとうございます 上記でやってみたのです セルに前の値が残ってしまいます 1回目は9/10、9/11、9/12と表示され うまくいくのですが 2回目に空白になったセル例えば9/10だけ 表示してほしいのですが他のセルもデータが残ってしまいます クリアしたいのですが方法が分からず VBAで制御したほうがいいのでしょうか? 何かいい方法はないかと思案してます
790 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 10:20:20.08 ID:ufGoj8xi0.net] 年には言及無いし C1に「= A$1 & "/" & B1」これ入力して下へずらっとでいいんじゃないの
791 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 10:22:29.22 ID:ufGoj8xi0.net] >>785 どこが空白か 何が残るか
792 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 10:56:06.92 ID:RCZPpxX+a.net] 月かわるんかい じゃ新しい月になった時にどういう処理してるかも書かにゃ答えようがないぞ
793 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 12:13:19.29 ID:uNhFH8V1d.net] 月をまたぐ事はないので
794 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 12:15:18.01 ID:uNhFH8V1d.net] 今出先なので家に帰ったら皆さんが わかりやすいようにご説明したいと思います 言葉足らずなご説明で大変申し訳ありません
795 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 13:29:51.12 ID:MIZAw2OB0.net] なにがやりたいかよくわからんが、日付として取り扱わないほうがいい気がするなぁ 単純に文字列として連結しといたほうがいいかもしれん
796 名前:698 mailto:sage [2021/09/01(水) 16:29:17.25 ID:zi3lAKaz0.net] 698です お礼が遅くなってすみません >>718 さんの内容でほぼほぼ実現出来ました その節はありがとうございました Selectionを使っていた時に比べスピードもかなり上がりました データ数100万程で5秒くらいです ただ一部のファイルで元々設定していた表示形式が数値へ置き換わってしまい悩んでいます 例えば0010→10など 浅知恵でTextやCStrを使えばどうにかなるかと思いましたがダメでした
797 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 17:31:57.00 ID:xpLasvJBM.net] VBAからIEを操作するプログラムが Windows11にしたら動きません というのは周知の事実ですか?
798 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 17:40:04.10 ID:xpLasvJBM.net] ひとまずNavigateでURLを開くのはイケますが Document.readyStateを上手く拾えないので操作しようがないですね
799 名前:デフォルトの名無しさん [2021/09/01(水) 17:43:07.67 ID:AF6jYwWs0.net] >>793 セキュリティーを考えればそれが普通じゃね
800 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 17:43:57.36 ID:oM9EKr7Vd.net] >>782 お前、ここは何のスレだと思ってんの? 馬鹿すぎる奴は書き込むな
801 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 17:46:56.00 ID:xpLasvJBM.net] >>795 互換モードをedgeは載せているのだから動くものかと
802 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 18:08:06.29 ID:vx5cHFWE0.net] 下記のように反映された後 A B C D E ・ ・ ・ 1 8 12 8/12 2 13 8/13 3 14 8/14 4 5 ・ ・ ・ 2回目以降、B2〜B3を消去して出力すると A B C D E ・ ・ ・ 1 8 12 8/12 2 4/30 3 4/30 4 5 ・ ・ ・ 4/30と出力されます 4/30を自動でクリアして空白にしたいのですが いい方法が思いつきません ご教授おねがいします
803 名前:デフォルトの名無しさん [2021/09/01(水) 18:09:47.36 ID:kYWyELeA0.net] >>798 いい加減にしろ
804 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 18:34:36.51 ID:rcR5Gl32M.net] >>798 クリアしたあとDoループでB列が空白の場合はループを抜けるとかじゃダメかい?
805 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 18:59:14.96 ID:sD7Rqgd1M.net] じゃあ現実的な代替案はどうですか? ユーザー様にSeleniumドライバーのインストールと逐次更新をお願いするのは避けたいです
806 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 19:08:28.99 ID:n24W6MuYM.net] >>798 C1: = IF(B1 = "", "", A$1 & "/" & B1) これ入力して下へずらっとでいいんじゃないの
807 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 19:09:36.61 ID:V21gvc28M.net] B列が空ならC列も空にする
808 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 19:36:37.25 ID:QyYX1GEf0.net] >>792 >>721 を改造 Sub Macro6() Application.Calculation = xlManual Application.ScreenUpdating = False myAddress = Split(Selection.SpecialCells(xlCellTypeFormulas, 23).Address, ",") For Each EE In myAddress Range(EE) = Range(EE) Next Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub 変えたのは Range(EE) = Range(EE) だけ。これで多分いけるとおもうけど、どうだろう
809 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 19:38:47.95 ID:QyYX1GEf0.net] cells(1,1)=cells(1,1) って暗黙の型変換で cells(1,1).value=cells(1,1).value になっているとおもったけど違うのね
810 名前:698 mailto:sage [2021/09/01(水) 19:56:12.78 ID:zi3lAKaz0.net] >>804 実行すると対象セルが全て空白になってしまいましたw
811 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 20:21:01.01 ID:QyYX1GEf0.net] >>806 どういうセルがあるの? 例えば、 ="0"&1 だと 01 という文字列が残るんだけど 俺は365だけど、バージョンによって挙動が変わるのかもしれない。あんまりナイキはするけど
812 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 20:25:24.16 ID:vx5cHFWE0.net] >>802 > >>798 > C1: = IF(B1 = "", "", A$1 & "/" & B1) > これ入力して下へずらっとでいいんじゃないの ありがとうございますm(_ _)m 早速試してみます
813 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 20:53:46.87 ID:vx5cHFWE0.net] C1: = IF(B1 = "", "", A$1 & "/" & B1) B列に文字が入力された場合 文字がそのままC列に表示されれば 完璧なんですが 難しいでしょうか?
814 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 20:56:51.38 ID:QyYX1GEf0.net] >>809 C1: = IF(B1 = "", "", B1) ?
815 名前:698 mailto:sage [2021/09/01(水) 20:58:57.68 ID:zi3lAKaz0.net] >>807 別のシートからマスタのコードをTEXT関数、表示形式指定(例えば"00000")で表示させてるような状態です 計算結果→02010に>>721 を実行すると2010(数値)、>>804 を実行すると空白になってしまいます 今使っているのは2016ですが365環境もあるので後ほど試してみます .Copyと.PasteSpecial xlPasteValuesで高速化できる方法があったりするのでしょうか こちらに書き込む前に For Each SC In Selection SC.Copy. SC.PasteSpecial xlPasteValues で試した際は自力コピペしたほうがよっぽど早くてどうしようもありませんでした
816 名前:698 mailto:sage [2021/09/01(水) 21:28:52.21 ID:zi3lAKaz0.net] >>807 >>811 例えば、 ="0"&1 だと 01 別シートに打ち込んで実行したところたしかに空白にならず文字列で表示されました ただ ="0"&1 ="0"&2 ="0"&3 の3行で実行すると全て消えて空白です…
817 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 21:42:45.23 ID:WLDLOoPA0.net] >>806 >>805 valueプロパティの値がコピーされた感じかw
818 名前:698 mailto:sage [2021/09/01(水) 21:44:13.89 ID:zi3lAKaz0.net] >>812 連投すみません 3セルのうち ="0"&1 と ="0"&3 を選択すると文字列表示になりました ="0"&1 ="0"&2 と ="0"&4を選択すると1と2は消えて4だけ文字列で残ります…
819 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 21:45:19.70 ID:RPMibrUxM.net] >>809 C1: = IF(ISTEXT(B1), B1, A$1 & "/" & B1)
820 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 22:25:27.20 ID:QyYX1GEf0.net] >>812 >>814 Sub foo2() Application.Calculation = xlCalculationManual ' 手動計算にする Application.ScreenUpdating = False ' 描画を停止する For Each sc In Selection.SpecialCells(xlCellTypeFormulas, 23) sc.Value = sc Next sc Application.Calculation = xlCalculationManual ' 手動計算にする Application.ScreenUpdating = False ' 描画を停止する End Sub これの sc.Value = sc の部分を sc.Value = sc.value や sc=sc など色々試したが、上記がうまくいった なお一体どういう型変換が行われているのかまるでわからない模様
821 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 22:52:06.46 ID:h29OAeAi0.net] >>816 型指定宣言していないため、Forで指定するSCがVariant型 なので、SCはVariant(Rangeとは限らない…配列の1要素目みたいなイメージ) ただ、SC.ValueとするとSCはRangeと明示されるのでそういう動きになる んじゃないかなぁ
822 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 23:29:26.76 ID:2gcT+4EJ0.net] IE問題どうするかなぁ
823 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 23:36:24.86 ID:zknSVFy00.net] VBA止めるいいきっかけじゃん
824 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 23:42:06.70 ID:KwKwZOB6d.net] >>818 なくなるのはアプリ コンポーネントは残ると明言されてる でもコンポーネントをウィンドウに貼り付ければ簡単にアプリが完成してしまう
825 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 23:55:13.89 ID:QyYX1GEf0.net] >>818 まあlそのうち誰かがなんとかするやろ
826 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 23:58:40.93 ID:lmopnPTl0.net] ちゃんとしたシステム入れればいいだけ
827 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 00:17:40.36 ID:vUCj94gS0.net] ちゃんとしたシステム(爆笑)
828 名前:705 mailto:sage [2021/09/02(木) 00:50:02.40 ID:PlnEFAD30.net] >>814 まとめるとこういうこと? Sub Macro7() Application.Calculation = xlManual Application.ScreenUpdating = False myAddress = Split(Selection.SpecialCells(xlCellTypeFormulas, 23).Address, ",") For Each EE In myAddress Range(EE).Copy Range(EE).PasteSpecial xlPasteValues Next Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub
829 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 06:01:59.22 ID:pGyB2U1O0.net] >>815 > >>809 > = IF(ISTEXT(B1), B1, A$1 & "/" & B1) C列に無事、日付が表示されB1が文字列ならば 文字が表示されたのですが 2回目以降 例えば1回目の入力でB列に B 9/2 9/3 9/4 9/5 上記のように表示した後に2回目にB2に終了日の文字列を入力し再表示したら B 9/2 終了日 9/ 9/ 上記のようにB3以降にA1の値が反映されてしまいます 2回目以降B列が空白であれば空白にしたいのですがむずかしいでしょうか
830 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 06:17:15.44 ID:8TUhFQ840.net] >>825 「○○であれば○○としたい」って言語化出来ているのであればあとはIf文で判定するだけでどうにかなるはずだよ 一回自分がやりたい事を頭からケツまでしっかり書いてフローチャートを作ってみた方がいい ○○であれば○○としたいの時には当てはまらない場合はどうするかもしっかり書くことを忘れずにね
831 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 06:20:57.63 ID:pGyB2U1O0.net] 連投で申し訳ありません! 言葉たらづですいません。結局わたしがやりたいと思ってるのは A1に数字を入力 B1〜B2に数字を入力するとC列に結合た日付を表示しされる下記のような表です A B C 1 9 2 9/2 2 5 9/3 3 9/4 4 9/5 ただB2に文字列が入力されたらC2に文字列が表示され C3以降は空白になってくれればいいのですが
832 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 06:25:01.18 ID:pGyB2U1O0.net] 下記コードをここでお教えいただきもう少しで出来そうなのですがわたしにはむずかしすぎて Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo err 'B1B2じゃなければ終了 If Intersect(Target, Range("B1:b2")) Is Nothing Then Exit Sub 'とりあえずクリア Range("C1:C100").Clear 'メイン。整数じゃなければerrに飛んでコピーして終わり。trycacheみたいな事がしたかった 最初 = Cells(1, 2) 最後 = Cells(2, 2) ' If (Int(最初) = 最初 And Int(最後) = 最後) Then 行 = 1 For i = 最初 To 最後 Cells(行, 3) = i 行 = 行 + 1 Next Exit Sub End If '整数以外 err: Range("C1:C7").Value = Range("B1:b2").Value End Sub
833 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 06:57:24.18 ID:pGyB2U1O0.net] 間違いました! A1に数字を入力 B1〜B2に数字を入力するとD列に結合た日付を表示しされる下記のような表です A B C D 1 9 2 2 9/2 2 5 3 9/3 3 4 9/4 4 5 9/5 ただB2に文字列が入力されたらC2に文字列が表示され C3とD3以降は空白になってくれればいいのですが
834 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 07:37:19.92 ID:O3nuwBcWM.net] >>818 何か面白いことがわかったら教えて
835 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 07:53:36.77 ID:8TUhFQ840.net] >>829 (クリア処理) If IsNumeric(Range(″B1”).Value) And IsNumeric(Range(“B2″).Value) Then Dim TgtAry() As String ReDim TgtAry(0 to Range(”B2”).Value - Range(”B1”).Value, 3 to 4) Dim AryCnt As Long For AryCnt = 0 to Ubound(TgtAry, 1) TgtAry(AryCnt, 3) = CLng(Range(”B1”).Value) + AryCnt TgtAry(AryCnt, 4) = Range(”A1”).Value & ″/″ & TgtAry(AryCnt, 3) Next Range(Cells(1, 3), Cells(1 + Ubound(TgtAry, 1), 4).Value = TgtAry End If
836 名前:デフォルトの名無しさん [2021/09/02(木) 09:40:00.71 ID:lpxNteAka.net] もうあきた
837 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 09:50:07.01 ID:S+z0tXCPd.net] >>831 ありがとうございますm(_ _)m 家に帰ったら早速試してみます
838 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 10:17:54.51 ID:61uHr+ZW0.net] >>829 どんどん条件追加してんじゃねーよw 一旦最初から最後まで説明する感じで整理してみて
839 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 10:23:41.27 ID:61uHr+ZW0.net] とりあえず>>827 の条件 C1に入力して下にずらっとしてみて = IF(ISTEXT(B6), B6, IF(B6 = "", "", A$1 & "/" & B6)) ただしBのセルを空白にするのは手動 >>829 のC列は何やねん?
840 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 11:39:09.52 ID:S+z0tXCPd.net] >>835 すいません! コードの基本的なところを教えてもらえれば あとは自力で何とかしようと思ったのですか 思ったより難しくて(泣
841 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 12:26:07.30 ID:Lpp+cK/ya.net] もおお面倒くせええ 最初ユーザーフォームがどうとか言ってたろ? そっちの管理者に言うのが手っ取り早いんじゃないの、まさか自作じゃあるまいし
842 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 12:47:54.81 ID:jQ7od4vmd.net] 月と日の範囲らしき値をいれるようだが日だけチェックするとかが意味わからないんだよね それと今まで教えてもらったコードが実際に何ができるかわかならければ今後も同じような質問ずっとするのかな
843 名前:名無し募集中。。。 mailto:sage [2021/09/02(木) 13:06:30.53 ID:PlnEFAD30.net] 質問者は分散して書き込まれたわけのわからん条件を再度まとめて書いてくれないかな 文章力がないようだから番号を振って箇条書きがいいと思うよ そこから仕切り直し
844 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 13:44:53.64 ID:S+z0tXCPd.net] わかりました! すみません
845 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 14:04:46.60 ID:jQ7od4vmd.net] >>840 今までの経緯を見た感じだと単純な要件は ・A1には月、B1には開始日、B2には終了日が設定される ・C列には設定された開始日と終了日を使って開始日〜終了日の値が列挙される ・D列には設定された月とC列の値を使って日付が列挙される ※単純に月/日の文字列でよいのか(年を考慮した日付でなくてよいのか) まずこれだけの要件であれば >>828 で関数などを使わずにD列の設定を追加すればよい(Cells(行, 4) = CStr(Cells(1, 1))&"/"&Cells(行, 3)) 初期化の検討も関数がなくなれば「とりあえずクリア」の範囲をC1:D100にでもすればよい エラーについては関数がなくなれば今のままでも要件を満たすのでは
846 名前:デフォルトの名無しさん [2021/09/02(木) 16:20:28.02 ID:tb5mIgdu0.net] >>840 お前、いい加減にしろや
847 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 16:37:31.01 ID:61uHr+ZW0.net] >>829 で B2に文字列が入力された時D2がどうなるかが無い
848 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 16:56:20.51 ID:61uHr+ZW0.net] >>840 A1 月 B1 開始日 B2 終了日 (文字列の時もある) C列 B1からB2の連番 C1は常にB1 (B2が文字列ならそれをC2へ、以降空白) D列 月/日 D1は常に開始月/日 (C2が文字列ならそれをD2へ?、以降空白) でいいなら C1 = B1 C2 = IF(ISTEXT(B2), B2, IF(ISTEXT(C1), "", IF(C1 + 1 <= B$2, C1 + 1, ""))) D1 = A1 & "/" & C1 D2 = IF(ISTEXT(C2), C2, A$1 & "/" & C2) C2とD2は下にずらっとね
849 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 17:33:27.50 ID:pGyB2U1O0.net] >>831 自分のコードとどう組み合わせていいのかわかりませんでした エラーになってしまい自分には無理そうです もう少し勉強して出直したいとおもいます 本当にありがとうございます
850 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 17:40:30.06 ID:pGyB2U1O0.net] >>841 明瞭な説明ありがとうございます とりあえず業務上で必要なところは日付問題だけなので それさえ解決できれば今後はなんとかなりそうです
851 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 18:06:17.19 ID:jQ7od4vmd.net] >>846 こんな感じでいいんじゃないの? Private Sub Worksheet_Change(ByVal Target As Range) 'B1B2以外は終了 If Intersect(Target, Range("B1:B2")) Is Nothing Then Exit Sub End If 'クリア Range("C1:D100").Clear '開始日のチェック If CheckValue(Cells(1, 2)) = False Then Cells(1, 3) = Cells(1, 2) Cells(2, 3) = Cells(2, 2) Exit Sub End If '終了日のチェック If CheckValue(Cells(2, 2)) = False Then Cells(1, 3) = Cells(1, 2) Cells(2, 3) = Cells(2, 2) Exit Sub End If '開始日から終了日を設定 nRow = 1 For nValue = Cells(1, 2) To Cells(2, 2) Cells(nRow, 3) = nValue Cells(nRow, 4) = Cells(1, 1) & "/" & nValue nRow = nRow + 1 Next End Sub
852 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 18:06:38.29 ID:jQ7od4vmd.net] Private Function CheckValue(ByVal aValue As String) As Boolean For nLoc = 1 To Len(aValue) If InStr("0123456789", Mid(aValue, nLoc, 1)) = 0 Then CheckValue = False Exit Function End If Next CheckValue = True End Function
853 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 18:06:56.77 ID:1Fx06KPw0.net] まじでこんな仕様を業務で使ってんの?
854 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 18:13:18.91 ID:24Y/Debo0.net] Range型に入れられるものを変数に入れず処理するのほんと嫌い Cells(1,1)=2 とか せめて行と列をLong型の変数にしてやってあげて
855 名前:デフォルトの名無しさん [2021/09/02(木) 18:40:44.69 ID:95p8ZRX9M.net] >>849 日付の列だけあればいいよな 見た目は書式でどうとでもなるし
856 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 19:39:27.31 ID:vUCj94gS0.net] >>849 ここは日本やぞ
857 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 20:22:46.11 ID:JA6Fm57Z0.net] 散布図において、点と点を結ぶ直線の色を、その系列の系列名参照先セルの背景色と同じ色に一括で変えるコードを教えてください。 背景色が設定されてない場合は色は変更しなくて良いです。 例えば下記画像のデータと散布図があるとします。 B1:E1セルの背景色を赤色に塗って、F1:G1セルの背景色を青色に塗ってマクロを実行すると、散布図の直線のうち、#1から#4が赤色に変わり、#5、#6が青色に変わり、#7以降はそのままの色を維持するようにしたいです。 https://i.imgur.com/lLWaKl2.jpg https://i.imgur.com/Pdf7drp.jpg 系列が莫大な数のグラフだと設定から一つずつ色を変えるのは大変なので自動化したいです。 よろしくお願いします。
858 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 21:07:03.00 ID:pxeaKQvs0.net] 質問スレなのにコード全てを教えてもらおうとするのはいかがなものかね ある程度自分コード書いてここが分からないとかならわかるが
859 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 21:24:04.85 ID:DFz3pANA0.net] でも>>1 で作成依頼もOKって書いてるしなあ
860 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 21:26:06.23 ID:LsFuz3WEH.net] >>853 ほい ワークシートの中にグラフが1つしかないこと、全データがグラフに使われていることが条件 Sub Macro1() ActiveSheet.ChartObjects("グラフ 1").Activate For k = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 1 c = Cells(1, k + 1).Interior.Color If c <> &HFFFFFF Then ActiveChart.FullSeriesCollection(k).Format.Line.ForeColor.RGB = _ RGB(c Mod 256, Int(c / 256) Mod 256, Int(c / 65536)) Next End Sub
861 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 21:38:11.49 ID:pxeaKQvs0.net] >>855 それはすまない
862 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 23:50:56.62 ID:JA6Fm57Z0.net] >>856 ありがとうございます。 頂いたコードをちょっと改造したら出来そうです。
863 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 00:34:19.18 ID:7VSa3gcD0.net] FullSeriesCollectionってなんだよ 動かねーw
864 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 04:25:34.03 ID:kuvugUtS0.net] >>858 >>859 おめー、すごい本音と建前だな そのギャップ、埋める必要はない 吐露したいときはあるからな
865 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 06:02:06.71 ID:1mYCibIj0.net] >>844 試してみたら、なんとかなりそうです! 何度もご助言いただき ありがとうございます
866 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 07:17:18.60 ID:staQfXFI0.net] >859 検索した方が早いぞ 俺も知らないけど検索したら内容は秒で理解できた https://docs.microsoft.com/ja-jp/office/vba/api/excel.fullseriescollection
867 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 13:32:27.55 ID:LfmEXbOQ0.net] Bookを別名保存して配布用データを作成する場合に、.xlsx にしてそのファイルにVBAコードは存在しない状態にする方法はあるのでしょうか?
868 名前:698 mailto:sage [2021/09/03(金) 14:03:11.01 ID:XbDGKeUz0.net] >>816 >>824 どちらも求めている結果になりました 824は自分でも試してもエラーになっていたので助かりました 型変換でこんなにつまづくは思わなかった(未だに原理は理解出来ていない…) ありがとうございました!
869 名前:デフォルトの名無しさん [2021/09/03(金) 15:55:21.72 ID:yaNRzQx30.net] >>863 全角文字の拡張子だからテキストファイルか何かにするのか?それとも単なる馬鹿か?
870 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:59:38.52 ID:FrRqokaz0.net] >>865 寂しいの?
871 名前:デフォルトの名無しさん [2021/09/03(金) 16:58:35.16 ID:w5919iNp0.net] フリーランスエンジニアになってからの年収推移を公開【現在年収1000万】 https://dev-memo.net/fleelance_1000/ 【実体験】仕事ができない新卒エンジニアでも月収70万フリーランスになれる理由 https://off.tokyo/blog/shinsotu-engineer-free-lancer/ フリーランスエンジニアは年収900万円までは余裕!現役フリーランスエンジニアが徹底解説 https://flytech.work/blog/8142/ フリーエンジニアの平均年収!未経験が年収1000万円を超える方法とは? https://shikin-pro.com/guide/18633 【コラム】フリーランスは本当に自由なのだろうか? https://zenn.dev/cat2pgm/articles/42bb40bf121342 「月100万円」稼ぐ猛者も、副業を始めるIT人材が急増している真の理由 https://xtech.nikkei.com/atcl/nxt/column/18/01572/021900001/ フリーランスエンジニアになって月100万稼いだ話 https://comblog.net/2020/07/06/freelance-100/ 素人からでも「まずは月収50万以上」を目指したい方向け【フリーエンジニア・コンサル】 https://aruto.org/freelance-consulting フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説 uma66.hateblo.jp/entry/2019/04/07/153119
872 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 00:30:43.37 ID:HdS4X7vy0.net] >>862 自宅で使ってるExcelが2010がFullSeriesCollectionをサポートしてないというオチを wで表現してみたんだが 伝わらなかったようでスマン
873 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 00:46:52.30 ID:bCHQ7Kl80.net] そこそこできるんだけど、これ中学生辺り相手に家庭教師したらいい小遣い稼ぎになるんでね
874 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 00:51:02.10 ID:4OUEmuPid.net] 家庭教師なんて大学生の仕事だぞ オヤジは採用されない
875 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 20:55:48.09 ID:NYbUbMGR0.net] ハイパーリンクを絶対参照で設定しているのだけど(ファイル移動に備えて)表示文字列がフルパスだと 表示しきれないのでここだけ相対参照で表示したい. 絶対参照から相対参照文字列を取得する関数はないでしょうか?
876 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 22:01:27.65 ID:6VddzRoR0.net] 。。。ラムダ関数の件どうなったの?
877 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 01:09:39.85 ID:fgpBZKKDa.net] >>871 Perlで自作
878 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:00:10.71 ID:wW3S0zCbM.net] >>871 split
879 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:23:08.20 ID:LRYELwZL0.net] >>874 ヒントありがとう. 1,リンク元とリンク先のフィアル名以外のフルパスを区切り文字¥で分割する. 2,共通部分を除いたリンク元の文字列数の個数だけ”.\”を共通部分を除いたリンク先の文字列&ファイル名 で
880 名前:っていますか? 2の部分で個数を数える処理とかをスマートのやる方法ありますか?思いつくのが文字列を一つずつ比較して 異なると抜けるみたいみたいな処理がしか思いつかないんで. [] [ここ壊れてます]
881 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:23:56.54 ID:p7djLIgl0.net] >>871 相対参照でも表示しきれないものはどうする気だ?
882 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:24:49.55 ID:LRYELwZL0.net] 間違えた 1,リンク元とリンク先のフルパスを区切り文字¥で分割する. 2,共通部分を除いたリンク先の文字列&ファイル名に共通部分を除いたリンク元の文字列数の個数-1だけ”.\”をつける
883 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:25:31.04 ID:LRYELwZL0.net] >>876 そこまで深くないんで.
884 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:31:48.41 ID:p7djLIgl0.net] 相対参照への変換は動作が変わるので 表示だけ工夫することを勧めるよ
885 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 10:43:18.05 ID:LRYELwZL0.net] >>879 > 相対参照への変換は動作が変わるので →アドレスそのものは絶対参照のままにするので動作はかわらないと思います.
886 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 11:37:34.66 ID:p7djLIgl0.net] >>880 以下どれかじゃ駄目なん? (a)Tooltipでちゃんと表示して通常は切れたまま (b)2行に分けて表示 (c)パスの先頭から何文字か + ” 〜(省略)〜 ” + ファイル名
887 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 13:38:20.09 ID:7P2mUzTw0.net] それ、どこからの相対パスが欲しいんだよ? 自分自身から自分自身への相対パスなら、全部.\だから たんにファイル名だけ表示させればいいんじゃね 汎用的に真面目な相対パスに変換しようと思ったら結構邪魔くさいな まあこういうのは大概すでに誰かがやってる VB.NETだが https://dobon.net/vb/dotnet/file/getabsolutepath.html#pathrelativepathto とか。API呼び出しでやる方法もそこにある
888 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 15:24:56.80 ID:LRYELwZL0.net] >>881 表示だけでは絶対パスがわからないのでTooltipは必要ですよね。 表示をファイル名だけにするか、C のようにするかですけど、表示だけである程度場所が分かりそうな情報が表示されていると便利なので、相対パスもしくはそのファイルがあるフォルダー名のどちらかにします。フォルダーは存在位置をだいたい覚えてるもんですから。
889 名前:デフォルトの名無しさん [2021/09/08(水) 14:22:30.46 ID:pb/a0YKS0.net] D列〜H列の各4項目を印刷エリアのA列に配置して それぞれ印刷がしたいのですが、下記でも出力されますが、 もっと簡略な書き方あったら教えてください。 Sub PrintOut() Range("A1").Value = Range("D1").Value Range("A2").Value = Range("D2").Value Range("A3").Value = Range("D3").Value Range("A4").Value = Range("D4").Value ActiveWindow.SelectedSheets.PrintOut Range("A1").Value = Range("E1").Value Range("A2").Value = Range("E2").Value Range("A3").Value = Range("E3").Value Range("A4").Value = Range("E4").Value ActiveWindow.SelectedSheets.PrintOut (以下F列分〜H列分まで繰り返している) End Sub
890 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 15:21:04.14 ID:75/i6xmb0.net] >>884 offset 関数を使って I と J のループで回せば?
891 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 15:22:28.05 ID:XlNVU0UMH.net] >>884 Sub PrintOut() Dim a For c = 4 To 8 a = Cells(1, c).Resize(4, 1) Range("A1:A4") = a ActiveWindow.SelectedSheets.PrintOut Next End Sub
892 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 16:25:02.09 ID:XlNVU0UMH.net] 処理する範囲をわかりやすくしてみた Sub PrintOut() Dim a For Each c In Range("D1:H1") 'DからHまで a = c.Resize(4, 1) '縦4行 Range("A1").Resize(4, 1) = a ActiveWindow.SelectedSheets.PrintOut Next End Sub
893 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 16:25:12.58 ID:W4cHTvUwd.net] すげー!凄い短くなってる! ありがとうございます。 後で試してみます。 まだVBA初めて間もないのですが、しっかり勉行すれば、 繰り返し作業簡素化の可能性を非常に感じました。 ありがとうございました。
894 名前:デフォルトの名無しさん [2021/09/08(水) 16:48:49.57 ID:q+ZxDcv00.net] またいつものあいつに引っ掛かる馬鹿ども
895 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 17:49:01.52 ID:I0eTwbNOM.net] って言いたいだけの自尊心の擬人化さん
896 名前:デフォルトの名無しさん [2021/09/08(水) 18:05:21.93 ID:ehctv71ga.net] ねぇねぇワクチンが足りないとか余って捨ててるとかなんなの? Excelでさえ1億2千万人のデータぐらい余裕で作れるんじゃないの?
897 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 18:33:49.98 ID:lGj0x8DT0.net] with派は?
898 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 18:39:36.93 ID:wkgfp7fUa.net] Excelの印象派はちょっと困るねぇ セル結合じゃなくてシェイプでやってよ
899 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 19:58:14.37 ID:y8J9pOw20.net] Excelではどうにも出来ないたぐいのヒューマンエラーが多いからな
900 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 09:38:25.14 ID:foh10V2pM.net] たとえば5000行もある住所録(一人一行使う)で、左端(つまりA列)にチェックボックスをつけるって出来ます? 5000個もチェックボックスオブジェクトを作るって現実にやってる方います?これは現実的でしょうか? 今考えてるのはA列に正方形(□)とレ点付きの□の二択プルダウンを用意することなんだけど、 それだとマウスのダブルクリックで表示を切り替えることは出来なくなる。 良い方法ありますか?
901 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 09:59:04.73 ID:4tB32NIbH.net] >>895 チェックボックスを5000個作るぐらい簡単だが? けど、そういう一覧表を作る意味がないだろ 5000件も手作業でチェックなんか入れてたら絶対にミスが起きるし 次の作業のことまで考えて表を作れよ
902 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:11:27.57 ID:zJmTPnJXM.net] >>895 チェックボックスみたいなテキストでやる
903 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:12:10.09 ID:FIynLA9Dd.net] >>896 自分も同じことを思ったけど解決策にならないレスはせずに放置がいいと思う 理解していけばしていくほどやれることを絞って考えていくようになるかと
904 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:25:59.17 ID:4jr1qQtOd.net] 参考 チェックボックスの絵文字 使用は推奨しない ☑ ✅
905 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:27:08.70 ID:2Kg/wmz7M.net] >>895 ダブルクリックかライトクリックイベントで背景色変えるとかなんか印を付けるとかした方が楽そう
906 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:32:22.27 ID:IpCo+OYQ0.net] >>895 普通にその方法でいいじゃんと思うけど、ダブルクリック必須なの? チェックボックスの操作ならせめてシングルクリックだと思うけど。 マウス必須ならA列にハイパーリンクを仕込んでおいて、イベント ハンドラの中でどこが押されたかを判断して状態を反転させるという 方法もある。 ただこの場合A列は自由に入力可能なのでシートの保護を掛けることに なると思うし、どの部分をどこまで編集可能とするかということとの 兼ね合いになると思う。
907 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:42:39.73 ID:9k5sY4oP0.net] >>895 あなたの言ってることはダブルクリックとかチェックボックスとプルダウンとか意味不明なんだけど、やりたいことさえはっきりしてなら VBA でオブジェクトの追加コマンドを追加場所を1行から5000行まで変えながら回せばいい。
908 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:48:23.02 ID:4tB32NIbH.net] >>902 セルをコピペすればセルに乗ってるオブジェクトも一緒にコピペされる だからチェックボックスを5000個に増やすだけなら数クリックの手間だけで終わる ブックが重くなるけどな
909 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:50:53.75 ID:foh10V2pM.net] シングルクリックと間違えてました。 自動的に5000個作ると30分待っても終わらないので、ダメなのだと思ってました
910 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 10:53:21.37 ID:foh10V2pM.net] >>897 >>896 チェックを入れた行だけ特定の書式にしてファイルとして出力する用途なので、そこは気にしないのです
911 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 11:01:26.77 ID:4tB32NIbH.net] 試しにやってみたけど、チェックボックス5000個コピペだけなら20秒ぐらいで終わったぞ https://i.imgur.com/4Bo9Yvp.png
912 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 11:03:58.28 ID:foh10V2pM.net] >>906 1000個なら一分待てば出来ました。 しかしその後の操作がめちゃくちゃ重くなるのでこうした使い方は一般的ではないのかな、という疑問がありました
913 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 11:07:12.46 ID:foh10V2pM.net] >>897 おさわがせしました。 1000個作って、特定行を一行削除するだけでもとても完了に時間がかかるので、 この方の方法でしのぎます
914 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 11:21:19.40 ID:37zPgm1s0.net] >>907 ちなみにどんなふうに削除してる?
915 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 14:10:09.39 ID:m7/bNtYYa.net] クラスモジュールの引数に可変長引数を渡したくて、呼び出し側でその引数に変数をぶち込んで渡したいんだけど、これってやっぱりできないの?
916 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 19:38:24.58 ID:7gPjCFSp0.net] >>895 sheetモジュールに記述 ※ただ、選択済みのセルをクリックしてon/offができない Private Sub Worksheet_SelectionChange(ByVal Target As Range) d = WorksheetFunction.Unicode(Cells(1, 1).Value) Debug.Print (d) ' 38960 If Target.Column = 1 Then Target.NumberFormatLocal = WorksheetFunction.Unichar(10004) & ";□;0;@" If Target.Value = 0 Then Target.Value = -1 Target.Value = Target.Value * -1 End If End Sub
917 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 19:39:38.73 ID:7gPjCFSp0.net] デバッグ残ってたわ。こっちで Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'A列のみ If Target.Column = 1 Then '書式設定を設定 Target.NumberFormatLocal = WorksheetFunction.Unichar(10004) & ";□;0;@" '-1かけて反転させる If Target.Value = 0 Then Target.Value = -1 Target.Value = Target.Value * -1 End If End Sub
918 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 19:55:23.82 ID:zfiF925t0.net] 関連スレ建てたよ VBAなんでも質問スレ Part3 https://mevius.5ch.net/test/read.cgi/tech/1631184381/
919 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 23:48:42.23 ID:ULMewu8MM.net] >>910 delimiterで値を連結して一つの文字列にして渡し それを受け取った側で処理するとかw
920 名前:910 mailto:sage [2021/09/10(金) 00:39:56.77 ID:Ovs2Qwn/0.net] >>914 なるほど 無理やりすぎて草
921 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 00:57:16.66 ID:cGWG4Dd90.net] >>910 ちょっとなに言ってるかわかんないけど ParamArray とかそういうこと?
922 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 01:37:01.01 ID:k/ICsAd30.net] >>910 恰好つけて内容端折ったり、初心者に有りがちなオレオレ用語使ってるせいで意味不明 ちゃんと質問したら回答や代案出してくれる人いると思うよ
923 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 06:29:18.76 ID:SjJWgB1Wd.net] エスパーしてみるとオーバーロードしたいってこと?
924 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 07:09:26.44 ID:LHgBQKs+0.net] >>910 てParamArrayでいいじゃん(いいじゃん)
925 名前:910 mailto:sage [2021/09/10(金) 12:04:43.32 ID:9zsJDEjAa.net] 言葉足らずで申し訳ない ・クラスモジュールでtestSubを作る ・testSubには引数として複数の文字列(パス)を入れたいが、場合によってはいれる数が変わるので可変長引数として渡したい→paramArrayを使った ・標準モジュールでtestSubを呼び出すときに引数に文字列直打ちで入力→これは呼び出せた 例 class.testSub(“a”, “b”, ”c”) →OK ・一方で引数に参照渡し?で変数を入れることができなかった 例 Dim a as string:a = “a” Dim b as string:a = “b” Dim c as string:a = “c” class.testSub(a, b, c) →エラー まとめ:参照渡し+可変長引数を実現する方法はありますか?という質問です
926 名前:デフォルトの名無しさん [2021/09/10(金) 12:33:58.83 ID:LPBZaVhNM.net] へー、どんなエラーメッセージが出るんだい?
927 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 12:41:02.44 ID:s5UDpNf0d.net] bとcに代入されてないように見えるんだけど…
928 名前:910 mailto:sage [2021/09/10(金) 12:44:45.11 ID:9zsJDEjAa.net] >>922 誤字りました >例 >Dim a as string:a = “a” >Dim b as string:b = “b” >Dim c as string:c = “c” > >class.testSub(a, b, c) →エラー
929 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 12:44:47.75 ID:Wgizc1rOd.net] paramarrayは使ったことないからなんでエラーになるか知らないけど optional byrefをいっぱい作れば解決か?
930 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 12:57:26.48 ID:3anmc9lr0.net] うちではエラーにならないので、ParamArray以外のところで何か起きていると思う
931 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 13:42:46.46 ID:cGWG4Dd90.net] とりあえずエラーメッセージぐらい書け Call class.testSub(a, b, c) とかいうオチじゃないだろうな
932 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 13:48:25.18 ID:cGWG4Dd90.net] あと言っとくけど、参照型と参照渡しはちがうからな その例でいくなら(受け取り側で何やりたいかによるが)参照渡しである必要性なんてないんじゃね
933 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:05:47.68 ID:bX+CqFZ4r.net] vbaの配列って絶対要素数がわかってないとだめなの? 他の言語のリストみたいにあとから追加とか削除したいんだけど
934 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:09:49.67 ID:kF1ZwEU6a.net] >>928 一々ReDimしなきゃならん それは嫌って人のためにCollectionがある
935 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:16:50.98 ID:tlapevkG0.net] 二次元配列以外はコレクションでいいよな
936 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:22:02.18 ID:kF1ZwEU6a.net] Dictionaryも好きだけどね 用途によるね
937 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 15:47:18.98 ID:bX+CqFZ4r.net] >>929 まじかよ メモリ確保の問題かな? これは大きな弱点やな
938 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:10:25.64 ID:bX+CqFZ4r.net] 配列が可変だったら終わる作業が全く終わらん マジでいらつくわ
939 名前:デフォルトの名無しさん [2021/09/10(金) 16:26:30.74 ID:rHUFiRNt0.net] >>886>>887 コンパイルエラー 変数が定義されていません とか出たのですが・・・。 c のトコがハイライトされています。
940 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:31:21.74 ID:8Iwa8KgHa.net] >>934 変数が定義されてないなら定義すればいい
941 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:31:29.22 ID:2Fxd4w670.net] Set range = ActiveSheet.Range("J10") debug.print range.Cells(0, 0).address この出力がI9になります J10を期待したのですがどういう事ですか?
942 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:36:53.08 ID:8Iwa8KgHa.net] >>936 ActiveSheet.Cells(1,1).AddressはA1になるでしょ? んで、ActiveSheet.Cells(0,0).Addressはオブジェクト定義エラーになるでしょ つまり、ワークシートの起点はA1であり、Cells(1,1)なわけ だから、それから今回の事象は推察できるでしょ 余談だけどその変数名は絶対にやめた方がいい VBAには既にRangeって単語があるんだから
943 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:41:57.41 ID:8Iwa8KgHa.net] >>936 追記 あなたの考えどおりに動く、offsetって関数があるからそっち使ったらいいんじゃないかな
944 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:42:03.28 ID:tlapevkG0.net] >>936 1,1にすればなるだろ 0だから行列がそれぞれマイナス1されてるんじゃね? 0入れたことないから予想だけど
945 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:52:02.92 ID:2Fxd4w670.net] >>937-938 Cellsの引数はそのまま1つ目2つ目と考える事にします 変数名は質問用に適当にしましたすみません offsetが距離1つ先2つ先なのでこちらを使用しようと思います ありがとうございました >>939 1,1にすればなりますが論点はそこではありません
946 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 16:54:59.11 ID:tlapevkG0.net] 0から始まる配列なんかを入れたいという感じか
947 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 17:05:41.13 ID:cGWG4Dd90.net] >>934 変数が全角と半角混在してんじゃね つかコードそのまま張れよ
948 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 17:13:14.83 ID:8Iwa8KgHa.net] >>942 cの宣言してないだけ
949 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 17:47:04.78 ID:k/ICsAd30.net] >>920 下に書いたようにParamArrayを使ったメソッドが定義されたクラスモジュールを作って、 それに宣言した変数を渡してみたけどエラーは起きないよ。 後、「参照渡し」で有る事を気にしてるけど、ParamArrayが指定された引数は参照渡しになる。 例えばtestSub内でargs(0)に適当な値を割り当てると、呼び出し元のcaller関数のaの値も変わる。 クラスモジュール(class.cls) Public Sub testSub(ParamArray args()) Dim arg For Each arg In args If VarType(arg) = vbString Then Debug.Print arg; Next End Sub 標準モジュール Sub caller() Dim a As String: a = "a" Dim b As String: b = "b" Dim c As String: c = "c" Dim Class As New Class Class.testSub a, b, c 'イミディエイトウインドウ: abc End Sub だからこっちが質問内容を取り違えてるんだと思うんだけど、どこが違う? それとエラーメッセージを教えて欲しい もし意味が分かるならコンパイルエラーか実行時エラーかも知りたい
950 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 18:37:19.42 ID:k/ICsAd30.net] >>934 Columnsで列ごとに取り出す方法で短く、分かりやすくしてみた Sub PrintOut() Dim Column As Range For Each Column In Range("D1:H4").Columns '指定範囲を一列ごと取り出す Range("A1:A4").Value = Column.Value '取り出した一列の値をA1:A4に張り付ける ActiveWindow.SelectedSheets.PrintOut Next End Sub ちなみにこういうのはActive***とセル番号指定じゃなくて、 シートモジュールとテーブル使った方がメンテしやすくなる。 A1:A4とD1:H4にそれぞれテーブルを作成(セルを選択して「ホーム」リボンの「テーブルとして書式設定」)し、 A1:A4のテーブル名を「コピー先」、D1:H4のテーブル名を「コピー元一覧」にする。 そのシートのシートモジュールに次の様なメソッドを定義する Sub MyPrintOut() Dim Column As ListColumn For Each Column In ListObjects("コピー元一覧").ListColumns ListObjects("コピー先").Value = Column.DataBodyRange.Value ActiveWindow.SelectedSheets.PrintOut Next End Sub やってることは一緒だけど、 ・コピペする(される)セルの番地が変わっても動く ・D1:H4の範囲が増えてもテーブルを範囲を変更するだけで動く ・「コピー元一覧」から「コピー先」に張り付けてるのがソースを見ただけで分かる とメリットだらけ
951 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 21:16:37.69 ID:cbJJzriEM.net] >>937 > 余談だけどその変数名は絶対にやめた方がいい > VBAには既にRangeって単語があるんだから なぜ? VBAは型の名前空間と変数等の名前空間違うから問題なく動くぞ
952 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 21:38:37.34 ID:2Fxd4w670.net] >>946 そういう問題じゃないんですよ
953 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 21:40:05.19 ID:TT1mfVcaM.net] >>947 だからどういう問題かを書けないなら黙ってなよ
954 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 21:43:02.76 ID:2Fxd4w670.net] >>948 動くかどうかという話ではないので論点はそこではありません
955 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 22:07:47.67 ID:rk4qX9ha0.net] 動かすだけならグローバルに配列つくればいいわな
956 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 22:16:10.75 ID:cbJJzriEM.net] >>949 ああ説明できないのかしたくないのかは知らんけどそういうことしか書けないのな まあ君はそれでいいと思うよw
957 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 22:19:16.50 ID:rrgK5Yqx0.net] >>951 可読性の面もあるし、変数名の意味付けの面もあるだろう Rangeって書かれても、どんな目的で何のRangeを変数に入れたのかが分かるように書くのが綺麗なコード 知らんけど
958 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 22:20:43.81 ID:oDrMz70O0.net] 難癖つけててワロタ
959 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 22:37:14.80 ID:sbKq7iyBM.net] >>952 > Rangeって書かれても、どんな目的で何のRangeを変数に入れたのかが分かるように書くのが綺麗なコード 例えば指定された範囲にいくつかの装飾を適用する Private Sub 装飾(Range As Range) With Range ... End With End Sub 君なら引数の名前をどうする?
960 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 22:56:49.10 ID:rrgK5Yqx0.net] Excelの装飾ってのがよくわからんけど、書式のこと? 関数っぽい書き方してるからこんなんでいいんじゃないの Private Sub SetFormat_to_TargetRange(ByVal TargetRange As Range) With TargetRange ... End With End Sub
961 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 23:04:12.45 ID:k/ICsAd30.net] 文脈的に明らかならRange As Rangeいいと思うけどね。 あと、「Rangeオブジェクト」である以上の情報がない変数や引数に対して無理やり名づけようとしても、 結局TargetRange的な抽象的な名前になっちゃう事もある。
962 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 23:06:14.39 ID:k/ICsAd30.net] >>955 流石にそれは冗長すぎて逆に読みにくいだろ・・・
963 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 23:11:20.56 ID:LHgBQKs+0.net] >>954 そこはtarget as rangeでいいと思う 一番読みやすい 自分しか使わない場合でもrange as rangeは使わないかな vbaの場合、引数なしの関数と変数って見分けが付きにくい ってかなんだこれエラーになるぞ Sub foo() Dim Calculate As Long Calculate End Sub これはエラーにならない Sub foo() Dim Calculate As Long End Sub これもエラーにならない Sub foo() Calculate End Sub 変数名と関数名がかぶると変数が優先される? まぁ何にしろ、こんな事は避けたいから俺はかぶらないようにするけどね
964 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 23:15:36.34 ID:rrgK5Yqx0.net] 多少長くても要素要素は省いちゃメンテが大変になるから多少冗長でも構わないスタンスで 単語の簡素化はしてもいいなら関数名をSetFmt_TgtRngとかにするかもね あとそもそも、挙げられた例は不適切では? 今回話題になってるのは呼び出し先の(汎用的に使える)関数での変数名ではなくて、呼び出し元での変数名かと
965 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 23:25:05.99 ID:k/ICsAd30.net] >>958 再定義(シャドーイング)されてるだけ。 親スコープから継承されてる宣言名(今回で言えばオブジェクト名.Calculate)を再定義すると、定義が上書きされる。 Calculateは整数として再定義されたので、そのスコープではCalculateだけなら暗黙的に整数になる。 明示的に「オブジェクト名.Calculate」とすればメソッドとしてのCalculateを使用できる
966 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 00:00:09.96 ID:qqZDVqkP0.net] personal.xlsbを複数の端末で共有したいので共有フォルダーにおいています. XLSTARTのpersonal.xlsbは削除して共有フォルダーのpersonal.xlsbへのショートカットをおいています. エクセルが起動するときにpersonal.xlsbを開くかどうか毎回聞いてきます (セキュリティのマクロの設定は「警告を表示して全てのマクロを無効にする」です) 毎回開くを押すのが面倒なので共有フォルダーのpersonal.xlsbだけ常時開くような設定はできないでしょうか?
967 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 07:08:07.40 ID:M0KgNEQw0.net] >>960 ありがとうございます こんな機能あったのか、名前被るとエラーになると思って避けてたわ
968 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 08:32:29.27 ID:uUbGGWZvM.net] >>962 スコープを持った言語ではたいてい内側のスコープが優先されるよ 中にはあえてエラーにする言語もあるけど https://docs.microsoft.com/ja-jp/dotnet/csharp/misc/cs0136
969 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 09:37:25.87 ID:3jGknNChp.net] >>955 関数の大きさにもよるな 小さくてすぐ上に引数設定して 型が見えてるようなのはvalueでいいと思う 少しごちゃごちゃして見辛いのは targetRangeでいいと思うし 更にもう少し大きくなって業務的な 意味を持つようになったらその名前付ければ いいんじゃないかな
970 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 10:18:08.93 ID:JYcIgh+V0.net] >>936 です 質問用に最少構成にする時点でもう少し変数名に気を付けるべきでした 変な流れになってすみません
971 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 10:49:48.68 ID:eXg+YAmHM.net] >>964 Valueはないわ…
972 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:17:24.93 ID:qqZDVqkP0.net] >>966 そうだよな。value指定ではフォーマット変更は無理だよな
973 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 13:14:28.26 ID:GnKWsobMa.net] Valueだけはねぇわ targetとtmpとi・j・kとrくらいしか意味の薄い変数は使わないようにしないと
974 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 13:57:33.58 ID:SrjYrNmNM.net] m,nも
975 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 14:37:20.09 ID:M0KgNEQw0.net] i・j・k 顔文字かと思った
976 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 11:12:03.90 ID:up1UF/mUp.net] valueがダメだと言ってる奴は恐らくプロパティとか プロパティの使えない他言語とか使ったことのない井の中の蛙という奴だな VBAしかやってないジジイにはよくあること
977 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 11:42:37.67 ID:igJhGb/40.net] >>971 君、韓国人?
978 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 11:48:24.82 ID:3Dv8YdNb0.net] 韓国をばかにするな!ITに関しては日本より進んでいるぞ
979 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 12:10:04.57 ID:tsfiI8be0.net] どこ見て言ってんだか
980 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 12:15:32.69 ID:3Dv8YdNb0.net] ここ見ててんだよ
981 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 12:55:49.25 ID:xXC+mfefM.net] >>971 またチンケなマウント取りが来たなw >>954 の引数としてValueはないわって話 値としての用途ならValueもよく使うよ
982 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 13:36:49.25 ID:5xdi3uAF0.net] オブジェクト型のRange型なのに、Valueを変数名にするのはVBAの常識的にNGなのは自明
983 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 14:09:17.30 ID:3Dv8YdNb0.net] >>977 > Valueを変数名にする 変数名の適否ではなくって、ByValで値引き渡しにしたらもとの範囲のフォーマットを変更できないという話じゃないのか?
984 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 16:11:41.17 ID:INS7ikYU0.net] >>978 今問題にしてたのは変数(引数)名であって引数の渡し方ではないのだが 参照型と参照渡しとちゃんと区別して理解してる?
985 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 16:21:24.92 ID:aVK/EU7g0.net] 元の元は>>936 (私)でdim range as rangeに対してsetしたのですが 引数としてrange as rangeとされている状態でsetする事なんてあるのですか? 普通は無いなら途中から引数の話になるのもずれてません?
986 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 16:31:54.19 ID:pHewVqE+0.net] そう言えばデコレーターパターンとかでは valueはよく見るけどreferって見ないよね なんでだろ?
987 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 16:37:26.61 ID:3Dv8YdNb0.net] >>979 955の話じゃないのか? 誤解してたらすまん。
988 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:56:51.30 ID:up1UF/mUp.net] >>981 それは引数が何かの値という意味で プログラム的な参照とか値とかは関係ないからさ
989 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 19:28:40.93 ID:qUARoTjRM.net] >>980 お前さんの普通がわからんけど、複数のレンジを返したいならそういうケースもあると思うよ そもそも>>952 は名前付けの話でSet云々の話に限定はしてないと思うし
990 名前:デフォルトの名無しさん [2021/09/12(日) 21:17:53.40 ID:K6Dv6PKH0.net] ttps://whois.nic.ad.jp/cgi-bin/whois_gw?key=182.22.16.251&codecheck-sjis=%E3%81%AB%E3%81%BB%E3%82%93%E3%81%AD%E3%81%A3%E3%81%A8%E3%82%8F%E3%83%BC%E3%81%8F%E3%81%84%E3%82%93%E3%81%B5%E3%81%89%E3%82%81%E3%83%BC%E3%81%97%E3%82%87%E3%82%93%E3%81%9B%E3%82%93%E3%81%9F%E3%83%BC&submit= に表示されているネットワーク名「YAHOO-NET」を取得しようとしているのですが、 Cells(1, 2) = objIE.Document.getElementsByTagName("pre").innerText ではメソッドがサポートされいないとエラー表示されます。 何がいけないのでしょうか?
991 名前:名無し募集中。。。 mailto:sage [2021/09/12(日) 21:29:23.70 ID:Nc1wnmSN0.net] 普段使ってないから問題点がこれ意外にもあるかわからないが Cells(1, 2) = objIE.Document.getElementsByTagName("pre")(1).innerText これでどう?
992 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 21:29:29.14 ID:wxf2x8Lb0.net] VBAとJavaScriptが、混ざっちゃった感じかな
993 名前:デフォルトの名無しさん [2021/09/12(日) 22:10:03.90 ID:UcZJH98c0.net] n時間後にエンターキーを押すプログラムってどう作るんだ?初心者にもわかりやすく誰か教えて
994 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 22:16:01.50 ID:wxf2x8Lb0.net] 「n時間後にアラームを設定して、鳴ったらENTERを押せ!」 と、命令する
995 名前:デフォルトの名無しさん [2021/09/12(日) 22:27:13.14 ID:K6Dv6PKH0.net] >>986 ありがとうございます。 「オブジェクト変数がセットされていません」というエラーメッセージが出ており、検証はできておりませんが、いけそうな気がします。 ページ遷移したらobjIE.Documentに遷移先の情報が自動で設定されないのかもしれません。
996 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 22:28:25.73 ID:8PbYCWHKH.net] >>988 基本はこうだけど、このままだとタイマーを仕掛けたのを忘れてて、ほかの作業をしてる時に急にEnterが押されてびっくりすると思うよ Sub n時間後にEnterを押す() n = 1 'n時間を指定 n時間後 = Now + TimeValue(n & ":00:00") 'n時間後が何時何分か計算する Do DoEvents Loop Until Now >= n時間後 'n時間誤まで待つ SendKeys "~" 'Enterを押す End Sub
997 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 23:27:46.85 ID:Nc1wnmSN0.net] >>990 (1)じゃなかった (0)だった
998 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 01:05:28.69 ID:gLuGYsXi0.net] >>991 せめてOnTime使えよ
999 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 01:09:51.01 ID:DeEefxbAd.net] OnTimeはあとからタイマーの設定を確認したり停始する方法がないから使い勝手が悪すぎるのがなあ
1000 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 01:34:41.43 ID:/cjB8lcQM.net] 配列に保存しとくか シートに書き出しておく それを元に確認したりキャンセルする
1001 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 02:28:08.29 ID:SNtxNYpLd.net] >>990 URLはここまででいいんだよ https://whois.nic.ad.jp/cgi-bin/whois_gw?key=182.22.16.251
1002 名前:デフォルトの名無しさん [2021/09/13(月) 07:15:43.89 ID:oNrWMPyP0.net] >>992 , 996 ありがとうございます!
1003 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:30:13.42 ID:GNx0xRRz0.net] つぎ https://mevius.5ch.net/test/read.cgi/tech/1631485799/l50
1004 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:41:47.37 ID:KCvhkZmap.net] >>998 うむ、ご苦労
1005 名前:デフォルトの名無しさん [2021/09/13(月) 09:30:38.14 ID:Kz73eSbEF.net] 1000ならコロナ収束
1006 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 57日 0時間 48分 23秒
1007 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています