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
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 になっているとおもったけど違うのね