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
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 ありがとうございます。 頂いたコードをちょっと改造したら出来そうです。