1 名前:デフォルトの名無しさん [2021/05/25(火) 12:48:01.06 ID:mepUVc/i0.net] !extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part70 https://mevius.5ch.net/test/read.cgi/tech/1616072923/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
77 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 10:29:31.20 ID:6cAiGaxYd.net] A列は途中で未記入の行は無し。B列以降は行によって列範囲は不明。途中の抜けは無し。この条件で一番右まで記入されている列は何列目なのかを知る方法をご教示願います。 この列の右に別の列を追加したいのです。
78 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 11:11:55.45 ID:Xo9eImhQH.net] >>77 UsedRange.Column
79 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 11:20:06.26 ID:Kwk6Ddry0.net] VBAでIE動かしたいっていうのは社内システムの操作じゃね 自動化しようにもそれしか選択肢がないっていうケース
80 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 11:27:04.16 ID:Xo9eImhQH.net] そういうのは末端の社員が勝手に自動化して楽しようとしてるケースに限られる そうでなければシステム部とか管理部がちゃんと対応してくれるはずだし
81 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 11:35:10.46 ID:Kwk6Ddry0.net] 末端しかこんなところにはこねーよ
82 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 11:40:00.72 ID:IWT/q5/E0.net] IEが2022/6/15にサポート終了する件なんだけど、VBAのIE操作もできなくなるの?
83 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 11:40:36.31 ID:y9OF8J1M0.net] >>74 これでいいんじゃね? https://note.com/teihen_escape/n/n40e672b1c97f
84 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 12:15:32.36 ID:Xo9eImhQH.net] >>82 サポートの終了と使用の禁止はまた別の話だと思うけどなあ サポート外のWinXPが起動不可能になったとか聞かないし
85 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 12:23:59.65 ID:IWT/q5/E0.net] >84 そうだとありがたいんだよね。 ただ記事で「2022年6月16日になっても、iexplore.exeは削除されないものの、アクセスしようとするとIE11は起動せずEdgeにリダイレクトされる」って書いてあったから不安なんだ
86 名前:デフォルトの名無しさん [2021/06/02(水) 13:20:52.87 ID:JznBaFAoM.net] createObjectで呼び出すんじゃないの?
87 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 16:05:40.28 ID:Xo9eImhQH.net] アプリは起動できなくされるけど、オブジェクトはさわれると予想 MS-Officeがもともとそういう構造だったし
88 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 16:34:22.01 ID:5rGltuVI0.net] ieが来年サポート終了するからchromeとseleniumで動かして見ようと思ったら webdriverが若干古いのしか公開されてなくて詰んだ 頻繁に更新するchromeをどうやって制御すりゃいいんだよ…
89 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 23:09:59.70 ID:qivQYfz/r.net] すみません、教えてください 配列の一部の最大値を取得する方法ってないでしょうか? 例えば二次元配列で a(1,1)=1 a(2,1)=2 a(3,1)=3 ‥ a(100,1)=100 という配列があったとして、a(10,1)〜a(20,1)の間の最大値を出す方法です for文で調べたい配列すべて調べて最大値を出す方法しか思い付かないのですが、他に方法はないでしょうか?
90 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 23:12:53.59 ID:GkUPJJQl0.net] それはギャグで言ってるのか
91 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 23:43:12.68 ID:y9OF8J1M0.net] Rubyなら何ちゃらかんちゃらの前置きだろ
92 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 23:59:28.51 ID:6j/qqwIU0.net] >>89 全部の配列を一旦シートにコピーして関数つかえばいいんじゃね
93 名前:デフォルトの名無しさん [2021/06/03(木) 00:15:46.47 ID:bA/gzbc70.net] >>89 死ね
94 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 02:19:06.04 ID:Ers5yK+g0.net] >>88 Ruby には、Webdriver を自動的にダウンロードする、モジュール・gem がある。 タスクランナーみたいなもの ブラウザの起動前に、ブラウザのバージョンを調べて、 Webdriver のバージョンが、それと一致しない場合、 それと一致するWebdriver をダウンロードしてから、処理を開始する
95 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 03:06:46.55 ID:WSKbBpAyd.net] まともな企業のLANだとネットアクセスとかダウンロードに制限かかってそう
96 名前:デフォルトの名無しさん [2021/06/03(木) 10:13:44.82 ID:oKNqyVQK0.net] 臀痛は5ch繋がらないω
97 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 11:26:30.81 ID:jnApLDzu0.net] >>95 これな Rubyで使ってる環境はその辺のとこ甘いのかも知れないな
98 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 11:51:09.60 ID:B6Wkxzx6M.net] 申請なしに何かをインストールする事も出来ないし、申請しても通らないから業務の効率化ってなるとソフトウェア開発の部署に発注するかVBAで作る以外の選択肢がない
99 名前:94 mailto:sage [2021/06/03(木) 12:27:51.20 ID:Ers5yK+g0.net] 自動更新するのは、個人のサイトとか ちゃんとした企業の本番環境では、毎週1回テストしてから、モジュール・gemを更新する。 そもそも、ブラウザも自動更新しない gemの更新を貯めないように。 基本は、毎週1回テストしてから更新する これをやっていない会社は、運用しているとは言えない。 ほったらかし
100 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 12:29:19.02 ID:OO42x4fga.net] そう上司にいえばやらんですむんじゃね
101 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 12:47:20.61 ID:jnApLDzu0.net] >>99 はー、都度テストするとはご苦労なこった つまり大きなシステムになるとその分、 Rubyの場合は毎週テストに労力と人員割いて 金掛けて実施しないとダメってことか かなり大きな会社じゃないとそこまで融通効かないだろうな
102 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 13:13:14.99 ID:4GINtqWnd.net] >>98 PowerShell便利だぞ
103 名前:94 mailto:sage [2021/06/03(木) 13:36:20.37 ID:Ers5yK+g0.net] 毎週、モジュールを更新するのは基本。 更新を貯めたら、保守・修正できなくなるので、ダメ。 こまめに・ちょくちょく更新 例えば、サイボウズ・Kintone は、 Kubernetes で毎日システムを作り直しているとか、 Netflix は毎日、わざとシステムを攻撃して、落としてテストしたりする ちゃんと運用していない会社は、更新をほったらかしにしてる
104 名前:94 mailto:sage [2021/06/03(木) 13:46:13.92 ID:Ers5yK+g0.net] 毎週1回、OS の更新も大変だから、 サーバーレス・自分でOSを管理しない、AWS Fargate を使えと言われる。 AWSが、OSの更新をやってくれるから だから、YouTube で有名な、雑食系エンジニア・KENTA の、 Ruby on Rails 初心者用コースに、AWS Fargate も入っている それで皆、くろかわこうへいのサロンで、AWSを勉強する Railsも今まで1人で、Heroku で作っていたのが、 Fargate, Terraform に変わってきてる 今の1年の未経験者は、10年以上のプロよりも、技術力が上になってる
105 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 14:22:18.35 ID:jnApLDzu0.net] >>104 大変だな 確かに新しいことを学ぶのは大事だけど 10年やって来た人が1年やってる人に負けるって その人の10年は何だったのって話になるわな 俺、Rubyやらなくて正解だったわ
106 名前:94 mailto:sage [2021/06/03(木) 14:37:37.44 ID:Ers5yK+g0.net] KENTA・くろかわこうへい、Udemy の人気講師・山浦清透などが現れて、 Ruby on Rails の教育革命が起こった ものすごい短期間で、効率的に学べる。 それで、1年ぐらい勉強した未経験者が、10年以上のプロよりも、技術力が上になった 東大合格マンガ「ドラゴン桜」みたいなもの 今の未経験者は、Docker Compose も必須
107 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 19:23:17.96 ID:TUnqxA7B0.net] >>89 VBAで配列にして・・・ってのが前提になっちゃってるパターンだな その配列もRangeから取得した奴だと思うが、素直にMax関数使いましょう
108 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 20:56:05.21 ID:uLpHnOIZ0.net] 効率化できるけど使うやつらが池沼で勉強した意味なかったな
109 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 21:12:55.36 ID:L0NZ98mH0.net] 効率化よりもいかにシートの内容を壊されないようにするかの工夫ばかり必要なパターンだな
110 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 22:14:51.09 ID:D5fnCzXq0.net] 自力でできることを質問した場合、解答がなくても困らんだろ
111 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 22:50:40.18 ID:TUnqxA7B0.net] >>98 発注出来る開発部署があるなら、そっちに投げた方が楽なんじゃ?
112 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 01:48:20.45 ID:JjzCcUaXH.net] 朗報 やっぱりオブジェクトは残る > MSHTML(Trident)エンジンに関しても、互換性維持のため > すぐに削除されることはない。OS内部に「IE 11」由来の > 機能は残る。「WebBrowser」コントロールを利用するアプリも > 引き続き利用できる。 https://i.imgur.com/BWnVYki.png
113 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 01:56:50.63 ID:/SvJ4cKr0.net] >>111 別部署とのお金のやり取りが発生するからメチャクチャ渋るぞ
114 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 02:06:55.76 ID:ggq9OdP30.net] >>113 そんなん会社ごとによるし俺に言われても
115 名前:デフォルトの名無しさん [2021/06/04(金) 12:36:18.19 ID:tGFTJ4F20.net] 最初は、動いていたのですが、 そのうち、毎回6行目でエラーが出るようになってしまいました。 例えば D5セルに入力した3桁の数字をした時に D7に百の位、E7に十の位、F7に一の位を表示させたいのです。 入力した結果を見て、再入力することもあるので 関数⇒値貼り付けはやりたくないのです。 できれば、どなたかご教授をお願いします。 ファイルのシートは1枚のみです。 【1 OSの種類 】 Windows10 【2 Excelのバージョン】 office365 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long If (Target.Row >= 5 And Target.Row <= 161) And (Target.Row Mod 4 = 1) And (Target.Column = 4) Then r = Target.Row Cells(r + 2, 4) = Cells(r, 4) \ 100 Cells(r + 2, 5) = Cells(r, 4) \ 10 Mod 10 ← 実行時エラー1004 Cells(r + 2, 6) = Cells(r, 4) Mod 10 End If End Sub
116 名前:デフォルトの名無しさん [2021/06/04(金) 12:48:38.27 ID:tGFTJ4F20.net] >>115 補足 最初、エラーが出たやつ Cells(r + 2, 4) = Left(Cells(r, 4).Text, 1) Cells(r + 2, 5) = Mid(Cells(r, 4).Text, 2, 1) Cells(r + 2, 6) = Right(Cells(r, 4).Text, 1) 修正しても Cells(r + 2, 4) = Cells(r, 4) \ 100 Cells(r + 2, 5) = Cells(r, 4) \ 10 Mod 10 ← 実行時エラー1004 Cells(r + 2, 6) = Cells(r, 4) Mod 10
117 名前:デフォルトの名無しさん [2021/06/04(金) 12:49:56.32 ID:UUHTR6cxF.net] >>115-116 そのうちまた動くようになるさ
118 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 12:50:19.85 ID:4IT3M2Hh0.net] シートを保護したまま動かす前提で、何か色々修正したときに E7のロックをうっかりONにしてしまったとか。
119 名前:デフォルトの名無しさん [2021/06/04(金) 13:06:45.09 ID:tGFTJ4F20.net] >>118 ありがとうございます。 どうやらそれらしいです。 頑張ってみます。
120 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 16:43:12.67 ID:0sw3CVWxd.net] >>115 Private Sub Worksheet_Change(ByVal Target As Range) Dim n, n1, n2, n3 As Integer If Target.AddressLocal = "$D$4" Then If IsNumeric(Target.Value) Then n = Target.Value n1 = n \ 100 n2 = n \ 10 Mod 10 n3 = n Mod 10 Me.Range("D7").Value = n1 Me.Range("E7").Value = n2 Me.Range("F7").Value = n3 End If End If End Sub もう見てないかもしれないけど、どうぞ。
121 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 17:55:39.07 ID:Ca/vMZLe0.net] それだとn3 だけがintegerになるんじゃね
122 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 18:05:42.24 ID:Bit4dpt50.net] >>120 n3以外Variantでいいの?
123 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 09:03:08.07 ID:rlNy9EJ3M.net] 基本が出来てない典型
124 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 09:19:02.29 ID:6nlrivgRp.net] 基本が出来ていなくても何となく動いてしまう それがVBA
125 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 10:37:53.55 ID:qQr0HMbe0.net] あの書き方でよしとするネット情報が多くておれも最初間違えてたわ
126 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 11:01:57.88 ID:w++2yo+P0.net] VBAで、QueryTableを使ってUTF-8のCSVを読み込ませてるんですが、 この読み込みのマクロを使った後に、そのxlsmファイルを開いたままの状態で、何か別のCSVファイルを手動で開くと 中の2バイト文字がグチャグチャに文字化けされてしまいます xlsmを閉じてからだと何の問題もないんですが、作業してるとちょっと不便なんですが原因は何なのでしょうか?
127 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 13:08:34.35 ID:X22osQ9q0.net] これかな https://www.ipentec.com/document/office-excel-open-utf-8-csv-file
128 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 13:18:33.33 ID:+aLYn71C0.net] >>126 後段の「何か別のCSVファイルを手動で」は、 ・別のbook(.xlsx)からPowerQueryでのcsv読込み? ・それともcsvファイルをダブルクリックで直接開き? PowerQueryでのcsv読込みなら エンコードを一度自動認識で読み込んでも 後からステップの「ソース」の設定(歯車または詳細エディター)で 固定することも出来るけど・・・
129 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 13:51:45.19 ID:PrzcCeEoH.net] 入力の手間や長くなるのが嫌なら Dim n%, n1%, n2%, n3% で全部Integerになる
130 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 14:28:09.00 ID:w++2yo+P0.net] >>128 済みません、VBAでQueryTableを使ってUTF-8のCSVをシートに読み込んだ後、適当なShift-JISのCSVファイルをダブルクリックして直に開くと 開いたCSVの中の2バイト文字が文字化けしています Excelで開いてるウィンドウを全部閉じてから、CSVを開き直すと文字化けしていません
131 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 15:56:52.45 ID:Ko2adBFs0.net] マクロだけじゃない、Excel全体は基礎ができてないとすぐ壁にぶち当たる
132 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 16:25:26.38 ID:eGJ4gYzF0.net] 基礎って何ですか?
133 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 16:45:34.26 ID:QYWEL8gWM.net] >>132 私もそう思いました 基礎って何ですか?
134 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 22:09:51.31 ID:fW5GrJR10.net] 例えばVBAの基礎と言えば ・モジュールの先頭にはOption Explisit書いて全ての型は明示的に記述すること。 ・行、列を扱うときは使用範囲の最大値を考慮してIntegerでなくLong型で定義すること。 ・モジュール、関数、変数の名称は一見して何を意味しているのか分かるようにつけること。 ・モジュール、メソッド、関数には複数の役割を持たせて作らないこと。 ・基本、ひとつの変数に複数の型のインスタンスを代入する場合、Object型を使わずにインターフェースを作成して代入すること。 ・グローバル変数は使用せず、プロパティを使用すること。 ・VBA上では四捨五入を求めるROUNDは銀行丸めなので必要に応じてWorksheetFunctionのROUNDを使うこと 小数点以下の計算を行う場合、DoubleやSingle型は浮動小数点数扱いでIEEE754準拠のため誤差が発生 することがあることを念頭においておくこと。 まだまだ沢山あるけど 人や会社の厳しさや緩さによって多少は変わるけど こういった最初の内から押さえていないとマズいことだと思う。
135 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 22:10:33.71 ID:X22osQ9q0.net] >>130 問題が起きないように使えばいいのでは?
136 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 22:37:56.35 ID:NS39OhGXd.net] >>134 めんどくさいって思ったことないですか?
137 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 22:53:56.98 ID:zpL5HDoS0.net] RowがLongなのはわかるけど、 ColumnはIntegerで足りね?
138 名前:デフォルトの名無しさん [2021/06/05(土) 22:58:04.78 ID:OxA9wcds0.net] WindowsAPIのmciSendString関数を使おうとサンプルコードを見ているのですが、 Callで呼び出さずにrc=と記述されたものばかり見受けられます。 rc=の意味を調べてもなかなか回答が見つからず…これって何なのでしょうか。
139 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 23:01:50.30 ID:PrzcCeEoH.net] >>138 return code
140 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 23:05:55.78 ID:+aLYn71C0.net] 1つのbookにシート数44、1シートに1クエリーがあり、 「すべて更新」ボタンでやると部分的にクエリー更新に失敗
141 名前:することが多いため、 一覧表作ってシート名とクエリー名を変数にして For To Next で順番にクエリーを更新していくマクロを組んだ。 それまではちゃんと機能していたものの、シートの改造・追加・並び替えをしたら、 実行時エラー '-2147319767 (80028029)': オートメーション エラーです。 無効な前方参照か、コンパイルされていない種類への参照です。 と、エラーが出て途中で止まったでござる。 検索すると「メモリーの使いすぎ?」みたいな話はヒットするも、よくわからず。 プロジェクトエクスプローラー眺めてて、 「シートの順番入れ替えたりしたので、シート名の順番がぐちゃぐちゃになってるな・・・」 と、各シートのプロパティで、 sheet01 (○○○)、sheet02 (□□□)、sheet03 (△△△)・・・ と直してみたら、今度はエラーも出ず、1発で44クエリーが最後までマクロが実行されてもうた。 Dim tblQ As ListObject ' 対象となるクエリーの変数宣言 Dim ws As String ' sheet名の文字列変数宣言 Dim q As String ' クエリー名の文字列変数宣言 (中略) Set tblQ = ThisWorkbook.Worksheets(ws).ListObjects(q) ←ここで止まった tblQ.QueryTable.Refresh BackgroundQuery:=False としてたのだけど、sheet名がマクロの実行順に並んでいないと、 VBAはwsやqの検索に失敗することがある (特にシート数が多い場合) という理解でいいのかな? [] [ここ壊れてます]
142 名前:デフォルトの名無しさん [2021/06/05(土) 23:06:05.26 ID:HEfJq5i50.net] >>138 その程度の馬鹿頭でWindows APIなんか使うなよ
143 名前:デフォルトの名無しさん [2021/06/05(土) 23:09:38.86 ID:OxA9wcds0.net] >>139 ご回答ありがとうございます! rcという変数に関数を格納する、というのがいまいち理解できません。 Callで関数を呼び出しても問題ないはずですよね?
144 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 23:22:29.75 ID:fW5GrJR10.net] >>135 問題が起きにくくするようにのための決めごとだよ もっとも、やってる仕事場のプログラマーが歩んできた経験則に大きく左右されたりもするから そこは仕事場ごとのコーディング規約に基づいて組めばいいんじゃないかな。 それはプログラマーのお仕事としての基本になるかな。 >>136 面倒くさいよ。でも他の言語とは比較にならないくらい楽な方だよ。 >>137 またいつシートの行や列が増えないとも限らないじゃん。とある銀行系のところは行や列が増える以前からそんな想定をしてて最初からLong型を使うことがコーディング規約に記載されてたよ。 それにどうせInteger型はLong型を半分マスクしたものだからLong使って処理が遅くなったり容量余計食ったりすることないしね。
145 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 23:35:33.21 ID:NS39OhGXd.net] >>142 乱暴だけどw Functionと一緒だよ。
146 名前:デフォルトの名無しさん [2021/06/06(日) 00:10:56.51 ID:AEt8vzaWM.net] いつものruby馬鹿の自演
147 名前:デフォルトの名無しさん [2021/06/06(日) 01:19:16.01 ID:X88mu3QB0.net] >>144 ありがとうございます!
148 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 02:19:15.47 ID:rqYM4O//d.net] いつものあいつ
149 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 04:32:20.52 ID:V1i0NaJEa.net] >>140 シート順を駄目な順に戻して再現するならそうかも
150 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 10:05:15.65 ID:s0YManYn0.net] Ruby信者はあわしろいくやという人の手先らしい こんなスレまでわざわざ荒らしに来るちょっと頭が残念な人
151 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 11:13:17.21 ID:GvzTzrtAM.net] >>134 > こういった最初の内から押さえていないとマズいことだと思う。 うんうん、ドヤるなら綴りぐらいはまともに書けないとマズいわなw > ・モジュールの先頭にはOption Explisit
152 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 11:44:13.88 ID:kiIZdW9jp.net] まーたあわしろいくやか
153 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 13:08:52.04 ID:JiG+HYt80.net] 基礎ってなんですか?って質問している時点で恐ろしいわ。。。 基本を知らずにExcelを操作している社員がいる職場のシートは難解なんだろうなきっと。。。
154 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 13:48:07.37 ID:g5KkmiV+a.net] >マクロだけじゃない、Excel全体は基礎ができてないとすぐ壁にぶち当たる と言われたらまず基礎がどのぐらいか定義してもらわないと 何言ってるか分からないからだ
155 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 14:25:18.18 ID:+MyNHKVga.net] グローバル変数は許せよ
156 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 15:13:22.89 ID:WJZoQhbE0.net] その変数の問題だと思うんですが、subの中からFunctionをコールして、String型変数を引数で渡しても Functionの中でその変数が空っぽになります。どうして文字列が渡せないんでしょうか Function aaa(ByVal hoge As String) As Long を Call aaa(hoge) と書くとaaa内でhogeが空っぽです Public hoge とかしてみても駄目でした
157 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 15:52:47.68 ID:1YH+vaIj0.net] それ自分を呼び出してるだけじゃね
158 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 16:34:01.92 ID:vQVSsWXH0.net] また
159 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 17:16:44.69 ID:PdUE2wOEH.net] >>155 まずはモジュールの先頭にOption Explisitって書いてみ
160 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 17:31:48.02 ID:efAmahNiM.net] 値渡しするならCall aaa((hoge))が望ましい っていうか返り値があるFunctionってCallで呼び出す?返り値と同じ型の変数に代入とか演算に使ったりしない?
161 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 18:21:18.04 ID:pNkKMnVc0.net] VBAだけではないと思うんだけど、コードって使い回すじゃん?切った貼ったの繰り返しで完成後汚えなぁと思うことない? あと、コードを保管方法ってなんかないかな?使ったエクセル開いてコピーとかメモ帳とかいろいろやったけど不便でならない。
162 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 18:26:33.85 ID:WJZoQhbE0.net] FunctionとSubの違いもよく分かってなかったんですが、Functionの返り値を変数で受けようとした所 そもそも渡したい文字列がFunctionに渡せなくて困ってました 単に、自作の関数を呼び出す時に引数を渡してやればいいだろと思ってたんですが、それが出来ないので VBAはその辺が厳密なんですかね……?
163 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 18:32:25.23 ID:efAmahNiM.net] 例えばFunctionで返り値をString型が欲しい場合求める場合 Public Function aaa(ByVal hoge)As String ってString型を指定してやってFunction内でaaa = 【返したい文字列】ってやる必要があるのは分かる?
164 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 18:35:37.03 ID:efAmahNiM.net] Functionを呼ぶ側は bbb = aaa((hoge)) ってやるんよ 参照渡し(ByRef)の場合は変数をダイレクトに書いて良いけど、値渡し(ByVal)の場合は変数を括弧でくくってやらんと上手く渡せない場合がある。
165 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 19:11:37.69 ID:s0YManYn0.net] >>160 コピーして切った貼ったして使うことを使い回しとは言わない どっちにしろ使い回したい部分をモジュールや関数単位に纏めてそれを呼び出せ。 それが使い回しというものだ。
166 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 19:27:28.02 ID:HeHF5+P0d.net] 場合って何よ 具体的に書きなよ
167 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 19:56:36.98 ID:efAmahNiM.net] >>165 参照渡しと値渡しを同時に行う際、値渡しの変数に括弧をつけておらず、尚且つ変数のみである場合、参照渡しとして認識されるが呼び先では値渡し指定なので不一致であるとエラーを吐いて停止する(但し変数に対して演算を行っていた場合は値渡しとして認識される)から値渡しする時は括弧つける癖をつけろ。その方が可読性もあがる。 って言えば満足か?
168 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:01:57.50 ID:PdUE2wOEH.net] >>164 言うか言わないかは個人の認識の問題
169 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:28:43.00 ID:s0YManYn0.net] >>166 うん? それ何か違う気がする 演算した後値渡しでエラーになると言うことは、そもそも渡す引数の呼び出す側の値が呼び出さ
170 名前:黷驫ヨ数の引数の型で許容されるものでは無かったってことじゃないの? 例えば呼ぶ側でVariant型を定義した変数に“1”という文字列を入れていて、それを受ける呼び出される側の引数が Integer型に宣言されていた場合は型違いでエラーになるけど、呼び出し前にその変数に対して+1したものを代入すればその時点で暗黙の変化によりVariantの 内部型はIntegerになるから型が合ってエラーにはならない。という状況で、 括弧の話とはあまり関係ない気がするんだけど認識違う? [] [ここ壊れてます]
171 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:30:46.16 ID:s0YManYn0.net] 暗黙の変化ってなんだよ暗黙の変換ね
172 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:42:48.07 ID:aS7dMAuf0.net] Public Sub aaa() Dim aa As String, bb As String, cc As Long bb = ″b″ cc = 2 aa = bbb(bb, cc) End Sub Public Function bbb(ByRef b As String, ByVal c As Long)As String (中略) End Sub ってやるとFunction入る前にエラーで弾かれて aa = bbb(bb, (cc))ってやったりaa = bbb(bb, cc + 1)ってやったりすると通るんだがおま環だった?
173 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:47:53.29 ID:1YH+vaIj0.net] なにエラー?
174 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 21:00:41.59 ID:qWOh0TID0.net] >>148 やってみた。 やっぱエラーで止まった。 sheet番号がぐちゃぐちゃでもちゃんと動作するような、 クエリーを変数にした記述の仕方があるかもしれないけど、 少なくとも >>140 のやり方では、どうもオートメーションエラーになるみたい。
175 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 21:34:20.79 ID:s0YManYn0.net] >>170 コピーして実行してみたけど まず“b”のダブルクォーテーションが全角なのと、Functionを閉じているところがEnd Subになっている。 コンパイルした時点でエラーで弾かれたよ。 そこを修正したらエラーが出なくなった。
176 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 22:08:04.98 ID:vQVSsWXH0.net] >>170 ファイル壊れてんじゃね
177 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 22:13:12.19 ID:s0YManYn0.net] 関数やメソッドに括弧が必要なのは確か ・Functionで戻り値を受ける場合 ・Subで頭にCallを付けない場合 じゃなかったっけ? 後、括弧で括らないと順序関係なく 個別に引数を設定することが 出来るんじゃなかったっけか? まぁ自分としては何であれ括弧を付けて Subの場合は頭にCall付けて関数やメソッドが 呼ばれていることを明示する 必要があると思うけど。 あまり引数が多い関数は引数そのものを 抱えるエンティティクラスを作って そのインスタンスを引数で渡してやれば いい気がするしその方が可読性高いよね。