1 名前:デフォルトの名無しさん [2017/11/08(水) 11:26:30.13 ID:+KUB1/9hd.net] スレ立ての際は一行目に !extend:checked:vvvvv:1000:512 と入れてスレ立てして下さい ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※関連スレ VBAなんでも質問スレ Part2 mevius.2ch.net/test/read.cgi/tech/1432173164/ Access VBA 質問スレ Part1 mevius.2ch.net/test/read.cgi/tech/1328536426/ Excel総合相談所 126 https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/ ※前スレ Excel VBA 質問スレ Part50 mevius.2ch.net/test/read.cgi/tech/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
203 名前:デフォルトの名無しさん [2017/11/23(木) 14:06:43.11 ID:1VQF43Qed.net] >>194 xlbってなんだっけ? xlamじゃないの?
204 名前:デフォルトの名無しさん [2017/11/23(木) 14:07:06.07 ID:1VQF43Qed.net] かぶった
205 名前:デフォルトの名無しさん [2017/11/23(木) 14:35:16.43 ID:IQVJTYbd0.net] すいません。拡張子は違ったかもしれません。
206 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 15:49:16.74 ID:AvEDQSYF0.net] >>194 ネットで検索してみると回答は>>195 氏の「再計算」で正解だと思うよ そのユーザー定義関数の中で使ってる関数の中に再計算が発生する関数が含まれているのでは? 簡単な例でいくと新規ブックのセルA1に=TODAY()と入力し確定、そのブックを保存し閉じる そのブックを開くとTODAY関数による再計算が発生するため何もせずに閉じようとしても保存確認出る それと同じことでは
207 名前:デフォルトの名無しさん [2017/11/23(木) 17:02:33.93 ID:IQVJTYbd0.net] >>200 192の通り使っているのはif文とLeft関数だけです。 試しに関数の中の処理を全て消してみたのですが、 状況は変わりませんでした。
208 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 17:02:38.88 ID:mWIv05A8x.net] >>115 要らない
209 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 17:22:13.82 ID:k3nQdCAx0.net] >>201 おそらく A1が変わってないときに、=Kubun(A1) という式が必ず同じ値を返すという「保証」ができないので B1セルが変更されている可能性を排除できない ということで変更されている(可能性がある)と判断されてる ユーザ定義関数は中身チェックしないで非決定的だって判断だな シート開くときに再計算するかどうかのオプション設定なかったっけ?最悪手動かな
210 名前:デフォルトの名無しさん [2017/11/23(木) 17:30:51.41 ID:JDomtUrWp.net] >>201 その関数にDebug.print 文を仕込んでおいて 呼ばれたかどうかを確認してみたら?
211 名前:デフォルトの名無しさん [2017/11/23(木) 19:42:47.05 ID:IQVJTYbd0.net] >>203 保存確認メッセージを防ぐ方法はないですかね? >>204 関数は呼ばれていますが、それだと何か方法ありますか?
212 名前:デフォルトの名無しさん [2017/11/23(木) 20:00:32.08 ID:fJlhhdGs0.net] >>205 関数が呼ばれると言うことは変更されると言うことだから 保存確認ダイアログが出るのが普通 savedプロパティを変更する方法とか calculationプロパティをマニュアルにする方法とか 方法はあるかもしれないけど 他の問題が起きるようになるかもしれない
213 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 23:21:24.29 ID:SB9DcOfL0.net] Application.DisplayAlerts = False のこと?
214 名前:デフォルトの名無しさん [2017/11/24(金) 11:41:27.83 ID:h1FhSyIp0.net] 質問です。Excel 2016で、Autofilerされたシートの内容を参照するために (wsはワークシートオブジェクトです) Debug.Print ws.AutoFilterMode →この結果は True Debug.Print ws.AutoFilter.FilterMode →この結果も True Dim rgFilter As Range Set rgFilter = ws.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible) For Each e In rgFilter Debug.Print e Next e こんな感じで参照しようとしてるんですが、 参照してるシートでフィルターが掛かっていても、いなくても 同じように全件(25行なら25行)がイミディエイトに表示されます。 絞り込まれた結果のみを表示するためにはどうしたら良いのでしょうか?
215 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 11:52:22.18 ID:BOT2k7iW0.net] >>208 Set rgFilter = ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
216 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 12:05:42.58 ID:h1FhSyIp0.net] >>209 素早いご回答ありがとうございます。 修正してみましたが、今度は絞込みあり/なし何れも1行だけになりました 何だか難しい操作ですねえ…
217 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 12:12:04.66 ID:h1FhSyIp0.net] Dim MaxRow As Long MaxRow = ws.Range("A" & Rows.Count).End(xlUp).row これを追加して、 Set rgFilter = ws.Range("A1:A" & MaxRow).CurrentRegion.SpecialCells(xlCellTypeVisible) にしてみても、結果は>>208 と同じになりました。 んー謎です
218 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 13:34:47.29 ID:bxAooAvMa.net] >>205 あるにはあるけどクソめんどくさいぞ すべてのセルの初期値保持しといて、閉じるときに確認して値に変更なければsavedをtrueにしてから閉じる、とかね
219 名前:デフォルトの名無しさん [2017/11/24(金) 16:52:13.42 ID:x6NJ51zce.net] Sheets("Sheet1").Columns(2).Insert Shift:=xlToLeft Sheets("Sheet1").Columns(2).Insert Shift:=xlToRight この二行の動作の差が分からないので 違いを教えてください
220 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 17:34:32.78 ID:HKDmIDHRH.net] >>213 現在のcolumns(2)の中身が左にずれるか、そのままか、かな? 当てずっぽうだけど。
221 名前:デフォルトの名無しさん [2017/11/24(金) 19:18:42.44 ID:V+PY16OM0.net] >>206 >>212 アドインをあきらめます。 ありがとうございました。
222 名前:デフォルトの名無しさん [2017/11/25(土) 12:49:09.41 ID:roqaXNhOa.net] エクセルVBAですがあるシートで入力し別のシートに転記するというコードを記入しているのですが For文でやろうとするとうまくいきません。元々のシートの行が11行目から始まり転記先のシートが2行目から始まるのでネストを使って以下のようにコードを組んでみたのですが2行目の入力データが転記先のデータに2行追加されてしまいました。 1行目と2行目はそれぞれ別のデータが記述されておりそのまま転記できるようなコードにしたいです。 もしかしたら、そもそもforだとだめなのかもしれません。ちなみに入力するデータが11行目から始まり終わりは20行目で終わります。 がとりあえず繰り返し構文でできればかまいません。下記のコードをどう変えればいいか教えてください。 Sub 登録() Set syougai = Sheets("障害記録") 'シート名にて指定しているので変更しない事 Set itigi = Sheets("一時データ") 'シート名にて指定しているので変更しない事 Const hiduke As Long = 19 '日付列の定数 Const gouki As Long = 17 '号機の列の定数 Const era As Long = 18 'エラーコードの列の定数 Const hyou1 As Long = 11 '障害集計表上の定数 Const kisyu As Long = 21 Const syuukei1 As Long = 21 For i = 2 To 3 For j = 11 To 12 itigi.Cells(i, 1).Value = syougai.Cells(j, hiduke).Value '日付 itigi.Cells(i, 2).Value = syougai.Cells(j, gouki).Value '号機 itigi.Cells(i, 3).Value = syougai.Cells(j, kisyu).Value '機種 itigi.Cells(i, 4).Value = syougai.Cells(j, era).Value 'エラーコード itigi.Cells(i, 5).Value = syougai.Cells(j, syuukei1).Value '集計データ i = i + 1 j = j + 1 Next j Next i End Sub
223 名前:デフォルトの名無しさん [2017/11/25(土) 13:36:20.17 ID:fp6T8Ewd0.net] 〉〉214 ネストの使い方間違ってると思うのですがどう直せばいいのかわかりません。
224 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 13:39:02.15 ID:Sg1k8TV00.net] >>216 itigi じゃなくて itiji にしろ シート名「にて」はやめてシート名「で」にしろ i = i + 1 と j = j + 1 は不要なので消せ
225 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 13:55:20.06 ID:QhU2UVSF0.net] >>216 単純にシートで開始行がずれているだけなら For i = 2 to 3 itigi.Cells(i, 1).Value = syougai.Cells(i +9, hiduke).Value 以下略 Next でいいんじゃないでしょうか ループはネストすると 内側のループだけ全部回して外に抜ける、を外のループの回数 だから、ネストでは意図した動作にならないでしょう >>218 も言っているけど、Nextで変数に勝手に+1されるから足さなくていい
226 名前:デフォルトの名無しさん [2017/11/25(土) 14:08:02.51 ID:fp6T8Ewd0.net] ありがとうございました。 できました。
227 名前:デフォルトの名無しさん [2017/11/25(土) 15:25:06.65 ID:P/RTUJJid.net] てか hiduke なんて変数名使うくらいなら「日付」のほうが10倍まし
228 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 17:03:29.39 ID:dlgn0p0Vx.net] そもそもVBAでやることなのかな 転記先の一時データのシートのセルに障害記録シートのセルを参照する式を書くだけで良くない?
229 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 17:17:31.37 ID:4suMRhlB0.net] 変数名ぐらい自由にしてやれw
230 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 17:23:34.66 ID:Yv0FOuti0.net] >>216 値を取得しながら転記しようとするから混乱する コレクションなり配列なりに一回格納してから転記するようにすればネスト要らん
231 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 17:30:52.78 ID:Yv0FOuti0.net] >>223 変数名は大事でしょ こいつの変数の付け方は最悪に近いわ 代入の式見なかったらなんのことだかわからねー
232 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 17:32:47.09 ID:+Jz8ZPqE0.net] 本人できたって言ってるのにグダグダ言う奴ウザイわ
233 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 17:35:56.02 ID:ISZ6M3sb0.net] hidukeと日付のどちらか選べと言われたら、hidikeを選ぶ。
234 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 17:37:28.74 ID:S5e4mFeJd.net] 仕事内容を記録するエクセルを作成したく、 シート名は各個人名でフォームを開くボタン設置。 登録用に必要項目をフォームで作り、転記するサンプルマクロを書いたんですが、今後必要項目が増えたり、減ったりしたときに人数分フォームを弄ったりマクロ書き換えるのは面倒ななんですけど、一個をものを共有し使用するにはどうしたらいいですか? 各個人のエクセルを開き、作ったボタンで共通のエクセルを開きフォームを開いて転記させるとか? 共通のエクセルを読み取り専用で開き書き込む時に自分のエクセルを開いて転記させるとか? なんかうまいやり方ないですか?
235 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 17:42:32.82 ID:Sg1k8TV00.net] >>227 何が言いたいんだW
236 名前:デフォルトの名無しさん [2017/11/25(土) 17:52:49.62 ID:M1jU9gED0.net] >>228 シート毎つまり人毎にボタンを作るなら そのボタンをクリックした時にその人独自の値をグローバル変数とかに代入して フォームは共通のものを呼び出す フォームに入力されたものを書き込む時は さっきのグローバル変数を見て 書き込み先のシートとかを特定する
237 名前:デフォルトの名無しさん [2017/11/25(土) 17:53:40.22 ID:M1jU9gED0.net] >>230 同時に複数の人がそのエクセルファイルを使わない事が前提だけど
238 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 18:31:33.42 ID:S5e4mFeJd.net] >>231 同時に開くことがあるんですよ。
239 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 18:33:58.83 ID:MqKvnHus0.net] >>228 一つのエクセルファイルを複数人で同時に使うのはいろいろ大変だと思う。 共有共通にせず個人毎に違うファイルを使ってもらって、 仕事内容記録フォルダに入ってるファイル全てをまとめて集計するマクロを作った方がよさそ。
240 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 18:34:51.02 ID:Sg1k8TV00.net] >>232 データはなんでもいいからDBに書き込んでエクセルはインプット画面として割り切りなさい マジで
241 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 18:38:42.16 ID:Yv0FOuti0.net] エクセルの共有はマジで地雷 運用を見直した方がいい
242 名前:デフォルトの名無しさん [2017/11/25(土) 19:34:05.10 ID:PrfYax++p.net] >>232 入力するのが一人で他の人が見るだけなら問題ない 複数人が同時に書き込むならエクセルじゃなくて ウェブアプリとかにした方が良いと思う
243 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 19:37:11.17 ID:T5+qbkCf0.net] mdbを複数ユーザーで同時に掴めるなら、SQLでデータを投げれば動作するんじゃないの。 入力フォーム作りがクソ面倒くさいからエクセルでやるのは愚策中の愚策なのは確かだけど。
244 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 19:44:15.61 ID:4suMRhlB0.net] >>225 健康のためなら死ねるタイプ?w ごめんけど理解不能
245 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 19:46:52.39 ID:4suMRhlB0.net] どうしてもエクセルだけでやりたいなら、フォームとデータでファイル別けるべきだね
246 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 20:15:23.25 ID:Yv0FOuti0.net] >>238 いや、常識だろ 自分でメンテするにしたって嫌だわ
247 名前:デフォルトの名無しさん [2017/11/25(土) 20:24:47.32 ID:fZkth5mu0.net] フォームボタンをクリックした時に グローバル変数とかに時刻なり、その人のIDなりを記録して 編集中である事が分かるようにしておく 書き込んだら
248 名前:Nリアする 他の人がフォームボタンをクリックしたら 編集中かどうかチェックして 編集中なら後で再実行するようにダイアログを出す [] [ここ壊れてます]
249 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 20:38:06.48 ID:4suMRhlB0.net] >>240 お前の常識とか知らんし興味もない。 他人の変数名にケチ付けるのは常識じゃなくてエゴだろ
250 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 20:40:07.39 ID:99QBz+fh0.net] React では、データアクセス(CRUD)部分は、 Flux の、Store という部分で、 UI とは完全に分離させている nmp の、immutable パッケージで、データを変更不能にしたり
251 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 20:41:41.46 ID:4suMRhlB0.net] 日本語でおk
252 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 21:19:48.45 ID:d0mIe/tRa.net] 変数名は結構考えるけどな。 普段なら辞書サイトでその意味の英単語から付けることが多い。 API使えば変数名の重要性が分かる。
253 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 21:53:57.63 ID:Sg1k8TV00.net] >>245 それは変数名と言うより引数名でしょ? それだったら確かに大事
254 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 22:00:33.02 ID:T5+qbkCf0.net] 個人的に引数含む変数名に半角英字は避けるように徹底してる。 予約語と被らなくなるし徹底すれば読みやすいしね。 一般的に、名前に半角英数使うのはコンパイラが2バイト文字対応していない事が理由なんで、 対応しているコンパイラには積極的に2バイト文字で投げた方がいい。
255 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 23:35:03.26 ID:Yv0FOuti0.net] >>246 一年前に作ったコードの宣言部分と代入部分見ずになんの値か把握できる自信があるならどうぞ まだシステムハンガリアンの方がポリシーあるだけマシ
256 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 23:36:51.22 ID:Yv0FOuti0.net] レスの相手間違えたわ >>242 に対するレスね
257 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 23:47:28.66 ID:Sg1k8TV00.net] >>248 俺が>>246 で言った意図は、「引数名は大事だがローカル変数名はたいして大事じゃない」という意味だ。 それに反論しているのかな?
258 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 09:00:43.39 ID:/OBEl30Ad.net] 大事じゃない変数なんてないんだよ みんなそれぞれに役割があって、一生懸命に生きてるんだから
259 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 09:30:00.33 ID:ci9PkC0t0.net] >>250 それは違うだろ まあ、使い捨てのテストなんかは適当にやるけど 長い変数名が嫌なのは打つのが面倒だからなんだろうけど、そもそも同じ変数が何度も出てくる時点でリファクタリングの臭いがするわけでな
260 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 11:10:58.75 ID:A1ZwwN/70.net] >>252 ローカル変数に限っていうなら、上の方がよくて下に行くにしたがって悪くなると思っている ・ローカル変数がない ・tmp とか a とか x とかいう名前で十分わかる ・適切な名前をつけることでよくわかる ・適切な名前がつけられていないことで混乱する ・適切な名前がつけられているにもかかわらず混乱する そうだよね?
261 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 11:15:24.53 ID:hep87Sd80.net] >・適切な名前をつけることでよくわかる >・適切な名前がつけられていないことで混乱する 同じことじゃね?
262 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 11:16:38.23 ID:KMInKg0R0.net] ソンタクして変数名にvarを採用
263 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 11:24:16.70 ID:A1ZwwN/70.net] >>254 いや、 やれば改善する可能性があるのにやっていない状態、ということで下位になっている
264 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 11:44:51.98 ID:DTyNodR2M.net] >>251 底辺のお前も頑張ってるもんな w
265 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 11:50:05.48 ID:ApNVvKeX0.net] >>253 ローカル変数がないの意味がよくわからん 値渡しの引数はローカル変数なんだけど それを除外したとしても、変数なしで書ける処理は限られてくるし
266 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 12:54:24.61 ID:pGcZHtwF0.net] >>258 不要な変数を作るなってことだろ そのまま代入すりゃいいのに>>224 みたいにいったん変数に格納したがる奴は一定数いる
267 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 12:56:36.30 ID:OTnHPyYR0.net] VBAからどんどん離れて公開オナニーになってきた
268 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 13:04:15.84 ID:ci9PkC0t0.net] >>253 tmpとか、座標系の短い変数はきちっと関数化して処理の分断ができてるときに限るけどね 大体そんなもんじゃないかな >>259 配列に格納してから云々はそれぞれの処理を独立させることであとから見通しがよくなるんだよ たとえば、代入する値に条件付きで何らかの処理を加えなきゃいけなくなったときなんかにループしながら直接吐き出してるとネストが深くなって可読性が低くなる それぞれ独立してれば関数化するのも楽だしな
269 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 13:33:08.74 ID:pGcZHtwF0.net] >>261 > たとえば、代入する値に条件付きで何らかの処理を加えなきゃいけなくなったとき その時にやればいいだけ
270 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 14:16:29.61 ID:ci9PkC0t0.net] >>262 一回変数にいれることでそれがなんの値か、というのを明示するって意味もある 意味があるからやってんだよ
271 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 14:40:03.00 ID:pGcZHtwF0.net] >>263 >>216 ならコメントで十分
272 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 15:20:43.89 ID:A1ZwwN/70.net] >>258 日付が変わっているからIDは違うが、元の俺の発言は>>250 の >「引数名は大事だがローカル変数名はたいして大事じゃない」という意味だ。 なんだよね。 つまり引数は別として狭い意味のローカル変数について語っている。 それと、>変数なしで書ける処理は限られてくるし については、良い〜悪いの序列の話なので、「変数なしで書けるくらいスコープが狭い方が良い」ということさ。
273 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 16:18:08.52 ID:t/ZpdAAca.net] ( ・ω・)∩シツモーン 範囲A1:C10の値をまとめてD1:F10に代入するときにさ 直接=で結ぶと駄目で 一旦変数で tmp=range(A1:C10).value range(D1:F10)=tmp とかいうふうにすればオッケーなのって何でなのん?
274 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 16:56:09.10 ID:A1ZwwN/70.net] >>266 Range(A1:C10).Value = Range(D1:F10).Value でいけると思うけど?
275 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 17:06:14.25 ID:A1ZwwN/70.net] ごめん逆 >>266 のやりたいことは Range(D1:F10).Value = Range(A1:C10).Value だね
276 名前:デフォルトの名無しさん mailto:sage [2017/11/26(日) 17:18:28.93 ID:ApNVvKeX0.net] 値のコピーは Range("D1:F10") = Range("A1:C10").Value
277 名前:デフォルトの名無しさん mailto:sage [2017/11/27(月) 09:03:15.77 ID:3l0DMD54a.net] 範囲が同じなら R1.Value=R2.Valueで行けるな、普通に Set R1=R2はなんか無理 R1=R2でいけない理由はよくわからん RangeオブジェクトのデフォルトプロパティってValueだよね?
278 名前:デフォルトの名無しさん mailto:sage [2017/11/27(月) 12:39:02.79 ID:Hzamsy590.net] >>270 Rangeの既定のプロパティは、ドキュメント上だとItem 実際はちょっとトリックがあって、_Defaultっていう隠しプロパティ こいつがアドレス指定しない場合はValueを返す
279 名前:デフォルトの名無しさん mailto:sage [2017/11/27(月) 22:21:45.18 ID:HF1f2kGW0.net] >>270 Setを使うということはオブジェクトということだぞ。 それはRangeそのものを代入することを意味する。 A1セルにB1セルを代入など出来よう筈が無い。 A1セルのアドレスがB1? 意味不明だろ。
280 名前:デフォルトの名無しさん mailto:sage [2017/11/27(月) 22:54:13.44 ID:scsxtpuJM.net] indirectの悪口はそこまでだ
281 名前:デフォルトの名無しさん mailto:sage [2017/11/27(月) 23:55:45.37 ID:++h0dxh80.net] indirectが未だに理解できない
282 名前:デフォルトの名無しさん mailto:sage [2017/11/27(月) 23:58:34.84 ID:VuuuCAGm0.net] >>272 rangeオブジェクトの実体はアドレス情報ってことか?
283 名前:デフォルトの名無しさん mailto:sage [2017/11/28(火) 02:02:42.04 ID:+NcnLu/Q0.net] >>275 ??? それだけじゃねーだろ。 が、それも含むのは当然。
284 名前:デフォルトの名無しさん mailto:sage [2017/11/28(火) 07:27:08.64 ID:ZnyBsd4x0.net] indirectとかsumproductとか、便利なんだけどいまいちよく解らんよな。
285 名前:デフォルトの名無しさん mailto:sage [2017/11/28(火) 09:30:34.94 ID:PHeqRDr40.net] 忘れちまえよindirectの事なんか
286 名前:デフォルトの名無しさん [2017/11/28(火) 09:41:03.64 ID:/j8R3q5Od.net] >>272 Set の左辺は変数だから当然と言えば当然 A1セル自体は変数じゃなくてオブジェクトだからな
287 名前:デフォルトの名無しさん mailto:sage [2017/11/28(火) 10:01:09.63 ID:mtOclWiza.net] >>276 いやまあ、セル同士を直接セットが無理っぽいのは何となく感覚でわかるんだが、どういう動きでそうなってんのかなーって気になるわけよ
288 名前:デフォルトの名無しさん mailto:sage [2017/11/28(火) 12:43:56.96 ID:ZLcA5r8L0.net] Range()みたいなのって返却値がRangeクラスなだけあってRange()自体は関数だから
289 名前:デフォルトの名無しさん mailto:sage [2017/11/28(火) 14:06:44.13 ID:WkhkCF1D0.net] Rangeオブジェクト Rangeプロパティ Range関数 Rangeでチン これが区別できれば完璧
290 名前:デフォルトの名無しさん mailto:sage [2017/11/28(火) 22:19:20.97 ID:0EijvfTXM.net] ら...らんげ? (´・ω・`)b
291 名前:デフォルトの名無しさん mailto:sage [2017/11/29(水) 19:36:16.84 ID:vIwO7IkJ0.net] >>281 getRangeにしとけよな 紛らわしいわ
292 名前:デフォルトの名無しさん [2017/11/30(木) 20:52:21.44 ID:Acf/eaNYa.net] リストを絞り込み別のリストで1行だけを表示できるようにしたらどうしたらいいでしょうか? わかりやすくいうと、sheet1にA1からZ1000までのリスト置き、それを何らかの方法で絞込 sheet2のEの1にE列の絞り込んだ1行目をEの2にF列の1行目を表示し次へを押すと2行目を表示するようにしたい オートフィルみたいなことですが表示したいセルが文文章で多くそのセルだけを表示できるようにしたいです。 1行だけならなんとなくわかるのですが次の行にコマンドボタンを押すことで表示する方法はイメージできません。 for文ならiを使えばいいんでしょうけどやりたいことと違う
293 名前:デフォルトの名無しさん mailto:sage [2017/11/30(木) 21:50:06.23 ID:ECoRVPVY0.net] >>285 Find関数使って検索してヒットした行数を返すようにして、 受け取った行数を元に情報を取得、次へボタンはFindNextにしておく。 というのが一番簡単かなぁ。本当はExcelじゃなくてAccessで扱う方がやりやすいんだけど。
294 名前:デフォルトの名無しさん [2017/12/01(金) 14:32:31.35 ID:4uYh51s/0.net] 以下不明点を教えて 1なぜ変数を初期化するのか? 2なぜNextjでjだけループが終わるのか? 3If Hantei Then (もしも変数の場合は。。。) もはや意味がわからない 初心者にもわかりやすく答えよ Sub CorrectCode() Dim i As Long Dim j As Long Dim Hantei As Boolean '変数の値を初期化する Hantei = False For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To Cells(Rows.Count, 3).End(xlUp).Row If Cells(i, 1) = Cells(j, 3) Then '変数に"True"を代入する Hantei = True Exit For End If Next j If Hantei Then '変数の値を"False"に戻す Hantei = False Else 'セルの背景色を変える(チェックする) Cells(i, 1).Interior.ColorIndex = 6 End If Next i End Sub
295 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 14:54:37.77 ID:RC6w6Z/F0.net] >>287 Next j の捉え方からすると、そもそも実行の順番が分かっていないようなので基礎からやる事をおすすめする。
296 名前:デフォルトの名無しさん [2017/12/01(金) 15:05:39.92 ID:4uYh51s/0.net] 俺なりに日本語訳してみた 間違っていたら教えてくれ VBA初めて3日です 基礎は本読んでるからわかっている 変数宣言 変数に初期値を入れる わかりやすいように 変数iは2から一番下からみて最初に値の入ってセルまでをループする 変数jも同様 もしもA列とC列にループする上で同じのが見つかったら 変数にTUREを入れる そしてループを抜ける そんでまたjのループを繰り返す もしも変数がTUREをもっていたら FALSEに変える → なぜ? セルの
297 名前:色を変える そんでiのループを繰り返す [] [ここ壊れてます]
298 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 15:48:12.50 ID:AGjDU3vg0.net] 初期値をfalseにする理由 trueの時は色づけという流れにしたいので、予めfalseにしておく必要がある boolean型の初期値はtrueなので。 途中でfalseを入れる理由 i=1 のままで j を最終行までループさせてチェック その次に i=2 にして j を同じく最終行までループさせてチェックするのだが i=1 でのチェックが終わった結果 true なら i=2 でのチェックに備えて false に初期化する必要がある これは基本的に最初の初期化と同じ考え方
299 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 15:49:27.01 ID:Mw452gW7E.net] Hanteiの初期化、j のループの直前に置けばIf文の後の変数初期化がいらなくなる気がする・・・
300 名前:デフォルトの名無しさん [2017/12/01(金) 16:20:04.74 ID:4uYh51s/0.net] >>290 なるほどわかりやすい このプログラムを日本語化して
301 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 16:42:02.13 ID:xc+Vk5Dr0.net] >>287 最初の変数初期化は全く必要無い。 そもそもこういうBooleanな変数を用意することに疑問。 こういう変数は、どうにもそれが無いとプログラムが組み立てられない時に使うべきで、出来るなら使わない方向で組み立てるべき。 そして、やってる内容を見ればこんなもの使わない方向で組み立てられる。 こういうコードはやりたいことを論理的につめられていない時に安易に書き出してしまった時になりやすい。 はっきり言ってクソコード。 全く参考にならん。 1.最初の初期化はいらん。 宣言後の初期値はFalseだから。 逆に初期値をTrueにする場合は初期化が必要。 途中の初期化については、jに関する1つの処理が終わった時にTrueになってたら次の処理の結果がおかしくなるから必要。 2.Exit Forのことを言ってるなら最も内側のFor Nextから抜けるからとしか言えん。仕様だね。 3.If〜Thenは〜がTrueかどうかを判定している。 If i=0 Thenはiが0だったらと考えがちだが正しくはi=0の文がTrueかどうかを判定している。 イミディエイトウィンドウに?(10=10)と入力してEnterキーを押すとTrueとなるし?(10=5)と入力してEnterキーを押すとFalseになる。
302 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 17:52:43.75 ID:P9JEW6xna.net] >>287 同じこといってるかもしれんけどこの場合変数Hanteiが丸々要らない if文の中にセルの色変更のコードを書けばいい 仮に、この変数がいるとしてもどんな値が入っててもどうせfalseにするんだからif分岐してる意味がわからない もっと言うとHanteiとかいう変数名がクソ過ぎる なんの判定かさっぱりわからん canChangeColorとかnotMatchValueとかしとけば目的が分かりやすいのに
303 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 19:09:05.50 ID:RC6w6Z/F0.net] A列の各セルの情報と合致するものが、C列に一件も無かった場合、 次に合致するデータが現れるまでA列の背景色を変え続ける という処理なのでHanteiが要らない様に書き換えるって難しい気がするんだけど。