1 名前:デフォルトの名無しさん mailto:sage [2020/03/17(火) 16:27:20.88 ID:hh8LiIgR0.net] ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part64 https://mevius.5ch.net/test/read.cgi/tech/1575297834/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
601 名前:デフォルトの名無しさん (ワッチョイ 7ab5-l81y) mailto:sage [2020/04/24(金) 02:40:01 ID:vJ3u9sjq0.net] >>531 どなたか…四苦八苦して終わりません、、 お時間ある方がいましたらお助けを
602 名前:デフォルトの名無しさん mailto:sage [2020/04/24(金) 03:41:33.98 ID:zeBff4Qi0.net] >>596 そうだな、取りあえず質問する時に相手に伝わるか考えながら質問した方が良いかな。 >元のVBAのフォーマット ??? これは何のこと? 何を言ってるの? シートのコピーで書式だけコピーしたいということ? だったらそんな機能は無いと思うから、あとは工夫でどうにかする。 Rangeの書式だけコピーはあるから、シートの追加と書式だけコピーの複合にするか、俺ならそもそもコピー元の書式を全部コードで実現してシ一トの追加とその書式を実現するコ一ドでやる。 右に追加というのが特定のシート(4月)の右というならコピーだろうがシートの追加だろうがそのものずばりの引数がある。 WorkSheets.Copy、WorkSheets.AddでクグるとMSのぺージが見つかるから、そこにサンプルもある。 一番右に追加していくというなら、上の特定のシートの部分に最後のシートを指定すれば良い。 最後のシートってのはシートの指定方法は名前と番号の2通り有るので、今回は番号で最後を表現する。 最後ってのはシート数が7個あれば7番目になる。 この場合の7個ってのはシートの個数。 シートの個数はこれまたそのものずばりのプロパティがある。 (これも上のページのサンプルそのもの。)
603 名前:デフォルトの名無しさん mailto:sage [2020/04/24(金) 04:14:59.23 ID:zODr3mBK0.net] >>531 5回読んだけど理解不能 画像や絵使って説明してほしいわ
604 名前:デフォルトの名無しさん (ワッチョイ 2e9a-2b7E) mailto:sage [2020/04/24(金) 09:43:49 ID:5xvA7bcI0.net] >>583 いつも同じこと感じています
605 名前:デフォルトの名無しさん mailto:sage [2020/04/24(金) 12:06:13.25 ID:EzpkTm1A0.net] 他の人は知らんが俺は独学でコマンドマニュアル見たり参考書買ったりしてた 例えば数値でも加算を繰り返してどこでエラーがでるかとかを 実際にサンプル作って実行することをひたすら満足いくまで繰り返したりしたな 学校の勉強と並行してやってたからいつも寝不足だったし
606 名前:デフォルトの名無しさん (ワッチョイ b701-Bsub) mailto:sage [2020/04/24(金) 16:20:00 ID:Enw/zcBV0.net] >>594 学習するのに何が効率いいかっていうよりも、 VBAを学習すること自体に対するリターンって意味でコスパが悪いと言いたかった 特にオフィス製品上でしか実行できない、やりたいことは単純な事が多いっていう特性上、 学習することでググったソースのコピペ以上に得られる物はあるのか?と。 内容を理解することでちゃんとしたコードが書けるってメリットはあるかもしれないが、 VBAで綺麗なコードを書けてもねぇ・・・ VBAのコードを拘るリソースは他に回すべきだ
607 名前:デフォルトの名無しさん mailto:sage [2020/04/24(金) 17:35:34.28 ID:vJ3u9sjq0.net] Sub Macro1() ChDir "c:\tmp" f = Dir("*.txt") c = 1 Do While f <> "" Open f For Input As #1 For r = 1 To 6 Line Input #1, s Cells(r, c) = Split(s, vbTab)(2) Next Close #1 f = Dir c = c + 1 Loop End Sub ここで↑の 「指定した場所に入ってる全てのテキストのエクセル化した時の特定の列と行をエクセルシートに一気に読み込む」 という神の様なコードを教わったものです。 列と行の開始はこのままでいいのですが、テキストの行が空白になるまでエクセルに読み込む というやり方に変える事は可能でしょうか。 これが職場の環境を大きく変えすぎて2人、本当に課からいなくなって現場に飛びました。 効率化しすぎて他でも応用できるようにしろと皆の前で大声で怒鳴られ泣けても知恵が出てこない ゆっくり本読んで覚えていきたいにもまず最優先で作れと室内であんなに大声で怒られて ネットで調べても調べ方すらわかっていなく 異動したい、何卒すみません
608 名前:デフォルトの名無しさん (ラクッペペ MM34-eHaU) [2020/04/24(金) 18:38:54 ID:GFko4FvkM.net] >>601 普段の仕事がExcelならコスパいいだろ
609 名前:デフォルトの名無しさん (ワッチョイ ae01-NnsP) mailto:sage [2020/04/24(金) 18:40:11 ID:zODr3mBK0.net] 一から十まですべて教わらないとできないような人はやめたほうがいいわ 実力以上のコードを教わったところで何も応用できず周囲の期待には応えられない 5chで教えてもらって作りました これ以上は分かりませんって正直に言えばいい
610 名前:デフォルトの名無しさん (ワッチョイ 0a2f-Hty+) mailto:sage [2020/04/24(金) 18:49:29 ID:4FfGWszI0.net] ForをDoにして、NextをLoop Until S=""かな つか、二人分の人件費が浮くような作業なら、ちゃんとした会社にシステム化たのめよ
611 名前:デフォルトの名無しさん (ワッチョイ 0a2f-Hty+) mailto:sage [2020/04/24(金) 18:51:14 ID:4FfGWszI0.net] まあこれで動いたら>>602がさらなるドツボにはまるのをニヤニヤしようぜ
612 名前:デフォルトの名無しさん (オッペケ Sr5f-iTDC) mailto:sage [2020/04/24(金) 18:53:25 ID:K658YEair.net] 効率化して上司から怒鳴られるってどんな職場だ 上司がクソすぎ
613 名前:デフォルトの名無しさん (ワッチョイ 91ad-R0M4) mailto:sage [2020/04/24(金) 19:12:23 ID:aTlSrVmc0.net] 背伸びしても上手くいかないもんだね?
614 名前:デフォルトの名無しさん (ワッチョイ acce-1Gce) mailto:sage [2020/04/24(金) 19:16:29 ID:sF/e/OCE0.net] >>602 ここに解決方法が書いてある https://www.manpowergroup.jp/column/tenshoku/phrases-and-writing-of-change-wish.html
615 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 00:00:18.00 ID:/63/MmUO0.net] コードくれくれ君
616 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 00:25:36.55 ID:gc0CgTOT0.net] 画像上部の21〜20日間隔の日付のセルの塗り潰しを下の1〜30日間隔の日付に塗り潰し変えたいんですがどうしたらいいですか? ・上部をforで2行目の最終列までループ ・ifで塗り潰し判定がTrue ・??? ・??? ・下部をforで2行目の最終列までループ ・ifで対象年月日間隔だったら塗り潰す と、こんなイメージなのかなと思ってはいるんですが、??らへんの処理がわかりません。 https://i.imgur.com/I6hiP5r.png
617 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 00:30:28.43 ID:XJisoOEM0.net] 次から次へと馬鹿が出てくるのはなぜ?
618 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 00:36:47.04 ID:8o24J96M0.net] Functionの任意引数(Optional)なのですが、初期値はstringかlong型のみだけしかダメなのでしょうか? シート名objectの引数で、省略したときにActivesheetを返したいのですが、「定数式が〜」のエラーが出てしまいます。 やはり、IFとIsMissingを使うしかないでしょうか。 Function test(Optional objシート名 As Worksheet = ActiveSheet) End Function
619 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 00:42:53.79 ID:l10aoXHL0.net] そもそも引数とか型の意味理解してる?
620 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 00:44:19.85 ID:7EOq2zNJ0.net] >>613 規定値に使えるのは定数値だけ 変数、プロパティ、関数などは使えない だからActiveSheetも対象外
621 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 00:50:04.58 ID:7EOq2zNJ0.net] >>611 その画像で説明すると、D3:K3をコピーしてC10:J10に書式貼り付けするだけでは
622 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 00:52:04.34 ID:lAut8yEK0.net] >>611 D2からK3をコピーしてC9に貼り付けて C2をK9に貼り付けるだけじゃないの? VBA使わない方が早そうなんだけど
623 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 00:53:34.41 ID:bDeh6DKGd.net] >>611 塗りつぶす条件がわからなければわからない
624 名前:デフォルトの名無しさん (ワッチョイ 4c2c-Hty+) mailto:sage [2020/04/25(土) 00:58:07 ID:a/EKdpBi0.net] >>602 Ruby なら、row.empty? で空行かどうか、判別できるけど require 'csv' CSV.foreach( "input.csv" ) do | row | # 1行ずつ処理 break if row.empty? # 空行なら、終了 puts "#{ row[ 0 ] } : #{ row[ 1 ] }" end 入力ファイル・input.csv あ,いう a,bc 1,23 出力 あ : いう a : bc
625 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 01:41:16.85 ID:7EOq2zNJ0.net] >>602 読み込みを止める条件が空行とEOFの2つになると、とたんに処理が面倒になるんだよな こういう時はLine Inputを別Functionに飛ばすとすっきりするんだけど、とりあえず汚い方法で書いてみた Sub Macro1() ChDir "c:\tmp" f = Dir("*.txt") c = 1 Do While f <> "" Open f For Input As #1 s = "s" r = 1 Do While Not EOF(1) And s <> "" Line Input #1, s If s <> "" Then Cells(r, c) = Split(s, vbTab)(2) r = r + 1 Loop Close #1 f = Dir c = c + 1 Loop End Sub
626 名前:デフォルトの名無しさん (ワッチョイ 1e09-w2of) mailto:sage [2020/04/25(土) 02:03:19 ID:8o24J96M0.net] >>615 そうなのですね、ありがとうございました。
627 名前:デフォルトの名無しさん (ドコグロ MM46-f1XF) mailto:sage [2020/04/25(土) 05:53:44 ID:SWq+pauNM.net] >>613 If 文使うしかないのはその通りだけど IsMissing() は引数の型を Variant にする必要があるのであまり良くない Function test(Optional objシート名 As Worksheet = Nothing) ' Nothing は既定値なので指定しなくてもいい If objシート名 Is Nothing Then Set objシート名 = ActiveSheet End Function ってやるのが定番 ググると同じことをやってる人がいる akashi-keirin.hatenablog.com/entry/2018/03/01/081945
628 名前:デフォルトの名無しさん (ワッチョイ 211f-unif) mailto:sage [2020/04/25(土) 13:56:29 ID:gc0CgTOT0.net] >>616 >>617 名前は下にたくさん羅列してるし、日付も右にもっとずっとあるからVBでやりたい。 日付間隔が上下で違うからどうやったらいいかと思って。 for 上部名前シートループ for 下部名前シートループ if 名前同一 for 上部名前年月日列ループ if 塗り潰し ※下部シート塗り潰し end if next end if next next ※の部分がどう書くのかがわかりません。 >>618 塗り潰す条件は同じ名前の人に対して同じ日付の所へ塗り潰す。
629 名前:デフォルトの名無しさん (オッペケ Sr5f-iTDC) mailto:sage [2020/04/25(土) 14:00:26 ID:jVtajgfWr.net] >>623 元データのc列を消せば良いのでは
630 名前:デフォルトの名無しさん (スフッ Sd94-S0vp) mailto:sage [2020/04/25(土) 14:21:24 ID:y/AcnKi/d.net] >>623 上部のD列から見ていって塗ってあったら下部の一つ左の列を塗る
631 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 20:10:34.52 ID:Z1BPhcf20.net] 下記のコードで出力範囲1と2をまとめるにはどうすればいいでしょうか Set OutputRange = Worksheets("Sheet1").Range("B2:C10") For i = 1 To 9 For j = 1 To 2 For k = 2 To 3 OutputRange(i, j) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, k, False) だとB,C列ともに列番号3をの値になる、というか列番号2で処理した後列番号3でもう一度処理を しているため、すべて列番号3の値になるんじゃないかとは思うのですが、具体的にどう直せば いいか教えていただけるとありがたいです Sub Test() Dim SerchKey As Range '検索値 Dim SerchRange As Range '検索範囲 Dim OutputRange1 As Range '出力範囲1 B列 Dim OutputRange2 As Range '出力範囲2 C列 Dim i As Long Set SerchKey = Worksheets("Sheet1").Range("A2:A10") Set SerchRange = Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A2:C10") Set OutputRange1 = Worksheets("Sheet1").Range("B2:B10") Set OutputRange2 = Worksheets("Sheet1").Range("C2:C10") For i = 1 To 9 OutputRange1(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 2, False) OutputRange2(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 3, False) Next i End Sub
632 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 20:18:25.81 ID:/63/MmUO0.net] このスレにくる質問見ると、俺に読解力がないのかなといつも思ってしまう
633 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 21:06:29.21 ID:OxGSjC7Q0.net] >>626 VLOOKUPは答えを複数返す関数じゃない
634 名前:デフォルトの名無しさん (ワッチョイ 7c7c-sVZV) mailto:sage [2020/04/25(土) 21:14:48 ID:OxGSjC7Q0.net] あ、質問の意味が今わかったわ 入れるセル変えずに関数の列番だけ変えてたらそりゃ同じ値しか入らない 中身がどうなってるか想像じゃなくて実際に確認すればどう直せばいいかわかるだろう
635 名前:デフォルトの名無しさん (ワッチョイ bb5e-1Gce) mailto:sage [2020/04/25(土) 22:19:20 ID:Z1BPhcf20.net] 質問が説明不足だったようで失礼しました 出力範囲が複数列ある場合にそれぞれの列を「出力範囲1」「出力範囲2」と設定していけばいいという ところまではわかったのですが、検索範囲が100列、出力範囲が99列、というように数が多くなった場合、 出力範囲のB列には検索範囲の列番号2 OutputRange1(i, 1)…… SerchRange, 2 出力範囲のC列には検索範囲の列番号3 OutputRange2(i, 1)…… SerchRange, 3 出力範囲のD列には検索範囲の列番号4 OutputRange3(i, 1)…… SerchRange, 4 ・ ・ ・ という処理を99行書かずに変数で処理できないでしょうか、というのが質問の意図です
636 名前:デフォルトの名無しさん (ワッチョイ 38ef-1Gce) mailto:sage [2020/04/25(土) 22:58:11 ID:u3Cmop/t0.net] j の役割って何だろう?
637 名前:デフォルトの名無しさん (ワッチョイ 7c7c-sVZV) mailto:sage [2020/04/25(土) 23:00:40 ID:OxGSjC7Q0.net] だから>>626のループの中身がどうなってるか見て順番考えたらいいんじゃないの
638 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 00:49:06.95 ID:1a87l4R/0.net] >>630 同じような処理を繰り返したい時は配列を使う Dim OutputRange(10) As Range '出力範囲 Dim i As Integer For i = 2 To 3 Set OutputRange(i) = Worksheets("Sheet1").Range(Cells(i, 2), Cells(i, 10)) Next みたいな感じで、変数を使えば、何十個あっても簡単にまとめられる
639 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 02:34:49.27 ID:LqR8iAxp0.net] なぜ馬鹿ばっかり来るのか
640 名前:デフォルトの名無しさん [2020/04/26(日) 03:25:04.50 ID:3JmljcZq5] 東大院生と本気数学トーク!!【数学ボーイZ 数学野郎さんコラボ】 https://www.youtube.com/watch?v=787N_AlSI0I 中3で数V先取り!? 京大数学系YouTuber古賀さんに開成中高時代を聞く! https://www.youtube.com/watch?v=npswPUea1-M 開成から京大理学部に進学した理由とは?古賀さんに京大の実態を聞く! https://www.youtube.com/watch?v=I8nWEHhgzxI 高校数学と何が違うの?大学数学でつまずかないためのアドバイス![大学数学準備講座1/4] https://www.youtube.com/watch?v=duXZGbRviG4 数学は「定義」にかえることが大事! https://www.youtube.com/watch?v=yhrUT4bLm7Q 数を創る話〜自然数から複素数への構成〜 https://www.youtube.com/watch?v=dQ2nFUTNchU 高校生でも雰囲気だけ分かるガロア理論 https://www.youtube.com/watch?v=LiPv0VuSvaE 高校生でも雰囲気だけ分かるゼータ関数とリーマン予想 https://www.youtube.com/watch?v=MaerL2XLaqk 【高校生でもわかる】いろいろな積分 リーマン,ルベーグ... https://www.youtube.com/watch?v=jzfaFCDn5JY 大学で本気で学問をしたい人へのアドバイス https://www.youtube.com/watch?v=7G7XbRSdk9k
641 名前:デフォルトの名無しさん (ワッチョイ d4da-1Gce) mailto:sage [2020/04/26(日) 06:16:38 ID:+0ojgInc0.net] 馬鹿ばっかり来るところにいるからじゃね ってか自力でできるやつは質問なんかしないだろ
642 名前:デフォルトの名無しさん (ワッチョイ 9602-TRCj) mailto:sage [2020/04/26(日) 09:08:46 ID:rBKIu5KT0.net] >>636 それググレカスキッズだと思う >>612
643 名前:デフォルトの名無しさん (ワッチョイ 2c7f-KNAb) mailto:sage [2020/04/26(日) 10:18:45 ID:LS9zyJ5J0.net] 複数あるコマンドボタンをどれを押しても一つの処理に入り、押されたボタンを取得して、ボタンごとに判断処理ってできないのでしょうか。(activeXです) 具体的にはシリアルポートの処理で以下のことをやりたいです。 コマンドボタンが機器名、その機器ごとに存在する複数のコンボボックスにポート名やボーレートを設定。 あるコマンドボタンを押したら、対応するコンボボックス郡の設定を取得してポートを開く。(ポートオープンはモジュールに記述したWritefileでやってます) ポートオープンで返ってきたハンドラが例外でなければ、押されたコマンドボタンの色を変更し、名前を"機器名+接続中"に変更。 また、コマンドボタンを押した時点で対応ポートのハンドラが存在すれば、そのポートを閉じて(ハンドラも初期化)、押されたコマンドボタンの色を戻す。 現在はボタンごとのプロージャを作成し、同じような処理を逐一書いてますが、機器が複数あって大変見にくいのと、記述が大変なのでまとめたいです。
644 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 10:39:23.22 ID:oDDaXD960.net] >>638 それ、まともにやろうとするとかなり上級レベル。 上級者を自認する人でも出来ない人が結構いる。
645 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 10:39:50.30 ID:1a87l4R/0.net] >>638 「コントロール配列」でぐぐれ www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_040.html
646 名前:デフォルトの名無しさん (ワッチョイ acce-1Gce) mailto:sage [2020/04/26(日) 10:44:46 ID:1a87l4R/0.net] >>638 同じような処理なら、ボタンクリックのイベントの中で変数にボタン名を設定してから、別に用意した共通部分のSubを呼び出せばいい ヒント woodbook.kir.jp/excel/vba/button_row.html
647 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 10:46:58.47 ID:oDDaXD960.net] おっ、それを貼るとは。 じゃあ、俺も。 以下の一連を全て理解し、使いこなせれば大分変わる。 addinbox.sakura.ne.jp/Breakthrough_P-Ctrl_Arrays.htm
648 名前:デフォルトの名無しさん (ワッチョイ 2c7f-KNAb) mailto:sage [2020/04/26(日) 11:53:55 ID:LS9zyJ5J0.net] ありがとうございました 手っ取り早くやれそうな感じではなさそうです
649 名前:デフォルトの名無しさん (ワッチョイ 3563-Btmo) mailto:sage [2020/04/26(日) 12:03:24 ID:3XXXGp1c0.net] >>640 懐かしいなコントロール配列 昔はよく使ったが最近使ってないな
650 名前:デフォルトの名無しさん (ワッチョイ 0791-2b7E) mailto:sage [2020/04/26(日) 12:07:36 ID:oDDaXD960.net] >>643 一応言っておくと、途中迄なら出来るかもしれないし(それで十分かも)、読み物としても読んどくと良いと思う。
651 名前:デフォルトの名無しさん (ワッチョイ 2c7f-KNAb) mailto:sage [2020/04/26(日) 14:41:44 ID:LS9zyJ5J0.net] >>643 紹介頂いたサイトの大元になるmougを参考にして押したボタンの色変えぐらいまでしかできません この処理にシート画面上のコンボボックスの値を関連付けて取得する仕掛を入れたいのですが検討つかず
652 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 15:58:20.12 ID:io10sll9a.net] 各ボタン押した最初の処理だけわけて 引数つけて共通処理に飛ばせばよくね
653 名前:デフォルトの名無しさん (ワッチョイ 7ab5-l81y) mailto:sage [2020/04/26(日) 18:40:06 ID:IAQJrydO0.net] 全部ここの人達のおかげで完全に憑き物が取れて教えて貰ったURLと持ってる本を参考にひたすら初歩のルールから愚直に 打っては実行を繰り返し練習してます Do loop For next 特にこれの破壊力は凄いですね これだけの為に覚える価値すらあると感じました あとはmsgboxの使い方の面白さ 感謝しかないです Do loopでwhileとuntilがあるけどよほど複雑でない場合 書き方変えるだけで同じ処理させられる感じですが 基本どっちかでで使い方覚えていったほうがいいものですかね 質問というよりただただ楽しくここの上級者たちにも癖だったり自分ルールがあるのかなと ああ楽しい
654 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 19:35:22.95 ID:1a87l4R/0.net] >>648 繰り返す条件が明確な場合はwhile、終了条件に着目した方が処理の流れがわかりやすい場合はuntil 適切に使い分けると、プログラム全体が読みやすくなって間違いが減る
655 名前:デフォルトの名無しさん (ワッチョイ acce-1Gce) mailto:sage [2020/04/26(日) 19:37:28 ID:1a87l4R/0.net] よくない例 While Not 終了条件 適切な例 Until 終了条件
656 名前:デフォルトの名無しさん (ワッチョイ 7ab5-l81y) mailto:sage [2020/04/26(日) 20:25:45 ID:IAQJrydO0.net] >>650 Sub ループwhile() Dim i As Long i = 1 Do While Cells(i, 1) <> "" Cells(i, 3) = Cells(i, 1) + 10 i = i + 1 Loop MsgBox i & "回whileでループ" End Sub Sub ループuntil() Dim i As Long i = 1 Do Until Cells(i, 1) = "" Cells(i, 3) = Cells(i, 1) + 10 i = i + 1 Loop MsgBox i & "回untilでループ" End Sub なるほど、空白になるまでループってのを練習してました 後者の方が一般的ですかね 勉強になります。
657 名前:デフォルトの名無しさん [2020/04/26(日) 21:08:58.39 ID:RAbG8RW6a.net] 僕は wihle しか使わない 理由は c言語にないから あと、なんとなくだけど、wihle と until は混ぜて使わない方がよい気がする いや、混在する人がいても文句は言わないと思うけど
658 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 21:11:31.65 ID:RAbG8RW6a.net] >>652 651 ですが、 理由は until はc言語にないから です すみません
659 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 21:21:03.37 ID:wya5Zv+N0.net] ド・モルガンの法則なんてのを知ってるとループ条件が 劇的に易しく書けるようになったりするよ
660 名前: mailto:sage [2020/04/26(日) 21:43:11.03 ID:Whjp3eXS0.net] >>654 ドモルガンは法則ではなくて公理すなわち前提条件なのでは?
661 名前:デフォルトの名無しさん (ワッチョイ acce-1Gce) mailto:sage [2020/04/26(日) 22:54:36 ID:1a87l4R/0.net] Not Is Nothing 英語の否定文って日本語とロジックが違うから直感的にわかりにくい
662 名前:デフォルトの名無しさん (アウアウエー Sa6a-1Gce) mailto:sage [2020/04/26(日) 23:37:47 ID:x2OEBIkDa.net] 少なくとも一回実行する必要があるとき until 一回も実行しないかもしれないとき while
663 名前:デフォルトの名無しさん (ワッチョイ b05c-QpYc) mailto:sage [2020/04/27(月) 00:02:16 ID:i1fhLCEO0.net] まぁ大事なのは自分の中でしっかりルールを固めておくこと なんとなくで使い分けてると100%デスマに陥る
664 名前:デフォルトの名無しさん (ワッチョイ 0a2f-Hty+) mailto:sage [2020/04/27(月) 00:02:40 ID:pzY5bj450.net] >>657 VBAでは、それはDo側に書くかLoop側に書くか WhileかUntilかはその条件の意味的なもので使い分けるのが本筋だろうけど 書くときの話ならどちらかに統一するルールでも良いと思う
665 名前:デフォルトの名無しさん (ワッチョイ ca56-nG0h) mailto:sage [2020/04/27(月) 00:32:05 ID:7P4A4QOo0.net] シート1のA1セルにx1、x2、x3と設定し、このx1〜x3をそれぞれx1をB1セルに設定されている値、x2をC2セルに設定されている値に置換するにはどのようにすればよいのでしょうか Replaceでは検索文字列および置換文字列を一つずつ指定できないため、検索したい文字列が増えるたびに処理が無駄に増えてしまうように思うため効率的なやり方を教えていただきたいです
666 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 03:31:04.69 ID:Rq5FZkLb0.net] もっとわかるように説明してもらわんと
667 名前:デフォルトの名無しさん (ワッチョイ ae63-V/Lh) [2020/04/27(月) 04:12:22 ID:NMjdVbpJ0.net] 置換と言ってるからセル参照ではない事だけわかった
668 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 04:51:42.68 ID:o+TU1QYP0.net] 学習能力のないひとがやってきて 説明能力の貧弱さを露呈する場所か・・・
669 名前:デフォルトの名無しさん (ワッチョイ 91ad-R0M4) mailto:sage [2020/04/27(月) 05:03:04 ID:Nsh172gi0.net] >>648 IF文、For文と配列で簡単な処理はこなせる 上級者はまた別のパラダイムで書いているが 先走る必要もなく基礎を確実に身につけよう >>655 ド・モルガンは定理になることが多いが そうなるのは公理系しだいだから 名前がおかしいと感じたことはない
670 名前:デフォルトの名無しさん [2020/04/27(月) 06:05:48.59 ID:XYadQOO00.net] >>660 非効率なコードを上げてくれ
671 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 06:24:43.93 ID:3fBcsBz5r.net] >>660 select case
672 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 08:38:39.18 ID:MOHWKMXM0.net] >>660 x3をd3に入れる 置換にこだわらず、代入しなおす
673 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 09:24:40.63 ID:JVYKLC34M.net] ワークシート名をsheet(i)みたいな感じで配列に格納して、 for i=i to X sheet(i).cell(row,col) = data next の様な、ループで各シートのセルに値を代入する方法を教えていただけないでしょうか。
674 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 10:44:49.67 ID:p6J78QU70.net] >>668 実際の要件知らんが、普通はもっといい方法があると思うが、質問通りに。 https://i.imgur.com/SdMgpZq.png
675 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 10:47:33.37 ID:o+TU1QYP0.net] Dim i As Integer For i = 1 To 3 ThisWorkbook.Worksheets(i).Cells(1, 1) = 1 Next i で済むようなものだと予想
676 名前:デフォルトの名無しさん (ワッチョイ 0101-K+B8) mailto:sage [2020/04/27(月) 13:38:56 ID:JH5ykH9R0.net] ・ツールの作成 ・バク対応、修正業務 ・各種テスト VBAを用いて上記の業務を行う場合、皆さん(自分の取り巻く環境以外)の現場で求められる頻度や重要度が高いスキルや業務を伺いたいです。 よろしくお願いします。
677 名前:デフォルトの名無しさん [2020/04/27(月) 15:07:52.31 ID:VtI6ihiD0.net] >>671 馬鹿は死ね
678 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 15:33:05.22 ID:uroKfm2Gd.net] >>668 何でシート名で配列なの? 既にシートオブジェクトの配列として使えるのに。
679 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 15:35:59.76 ID:MOHWKMXM0.net] >>668 シート名は普通に列挙したいんだと思った コード内に記述したいのか: sheet=Array("hoge","fuga","piyo","puyo") セル内に記述したいのか: sheet=WorksheetFunction.Transpose(WorkSheets("hoge").Range("a1:a4")) どうか、わかんないけど
680 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 15:36:24.43 ID:uroKfm2Gd.net] >>671 そいつは現場次第だよねえ。 現場に併せて何でも出来るってことかな。 AccessならSQLは必須だと思うけど。
681 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 16:19:32.17 ID:JH5ykH9R0.net] >>672 生きる!!! >>675 自分の周り以外だとどんなことにVBA使ってるか気になりましてね。他意はマジでなくて、単純な興味として質問してみますた。
682 名前:デフォルトの名無しさん (JP 0H34-GHE+) mailto:sage [2020/04/27(月) 17:19:41 ID:H2efCY7TH.net] 既存のVBAをどうしてもメンテせざるを得ないときに使う 新規に使うことはない
683 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 18:02:05.74 ID:fDdETITO0.net] ちょっとデータを加工したい時、軽い処理とか1回限りの計算はVBAでやってる VisualStudioはその場限りの捨てコードを書くには大げさすぎる
684 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 18:06:27.58 ID:JnEQ074MM.net] >>678 そんな貴方にPowershellオススメ
685 名前:デフォルトの名無しさん (ワッチョイ 0101-K+B8) mailto:sage [2020/04/27(月) 18:40:53 ID:JH5ykH9R0.net] >>677 >>678 レスありがとうございました。 ちょっとした作業を手軽に(環境構築とかなしで)効率化するときに使ってるってのが分かりました。 何気なく使ってるから頻度も重要度もクソもないと
686 名前:デフォルトの名無しさん [2020/04/27(月) 19:15:08.58 ID:XYadQOO00.net] 昔は「値で貼り付け」とかキー割り当てしてたけど最近のは割と便利になったから使ってないな 他には初回印刷日の挿入とか ファイルプロパティにタイトルの設定とかかな
687 名前:デフォルトの名無しさん (ブーイモ MMfd-enkp) [2020/04/27(月) 20:04:15 ID:GiQWIPCuM.net] 「値で貼り付け」に関して最近のはどう便利になってるの?
688 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 20:24:28.01 ID:Jy0k1GG60.net] VBAでの開発依頼がしょっちゅう来る…
689 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 20:30:04.12 ID:XYadQOO00.net] >>682 https://i.imgur.com/xIc2Szq.jpg
690 名前:デフォルトの名無しさん [2020/04/27(月) 20:34:34.60 ID:z3LiCQZGM.net] 配列を使った方が良い場合ってどんな時?
691 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 20:48:23.14 ID:XYadQOO00.net] >>685 相手は誰だ? ワークシート? Dictionary? CSV文字列?
692 名前:デフォルトの名無しさん (ワッチョイ 0101-K+B8) mailto:sage [2020/04/27(月) 23:24:48 ID:JH5ykH9R0.net] >>681 自分の素朴な疑問に答えてもらってありがとうございます。
693 名前:デフォルトの名無しさん (ワッチョイ 7a4b-R0M4) mailto:sage [2020/04/27(月) 23:26:56 ID:g7wz6Zov0.net] ここの人ら凄い、 いつも感心しながら読んでるけど本当に勉強になる。 これだけ知識や経験あるならユーチューバ―とかになって上手くやれば副業も出来そう
694 名前:デフォルトの名無しさん (ワッチョイ acce-1Gce) mailto:sage [2020/04/27(月) 23:27:29 ID:fDdETITO0.net] >>685 処理したい変数がたくさんあって繰り返し同じことをする時 処理したいセルがたくさんあって繰り返し同じことをする時
695 名前:デフォルトの名無しさん (ワッチョイ acce-1Gce) mailto:sage [2020/04/27(月) 23:28:15 ID:fDdETITO0.net] office田中もいつのまにかyoutuberになってたけど、こんなおじいちゃんだとは思わなかった
696 名前:デフォルトの名無しさん (ワッチョイ 64ad-Btmo) [2020/04/27(月) 23:42:25 ID:RTbdScdC0.net] VBAを本を読んだりググったりして勉強中です。 他社システムからいただくCSVファイルをExcelに取り込んで編集する必要があります。 頭にゼロが付いて、長さが不定の数字のフィールドがあるので、そこは文字列で 扱わなくてはならず、そのままExcelで開けません。 querytables.add でインポートしてみたところ、セル内改行の含まれる列があるため、 1行であるべきデータが2行になってしまいます。 POWERQueryを使えば回避できる、という情報にに突き当たり、とりあえずマクロの 記録をしてみて、使えるように変えられないか、と思いましたが行き詰っています。 「ソース = Csv.Document(File.Contents(””CSVのパス””),… 」 のCSVのパスの部分を変数にしたいのですが、変数にすると 「 .Refresh BackgroundQuery:=False」のところで [Expression error] インポート 変数 がエクスポートと一致しません。モジュールの参照が漏れていませんか?」 と親しげだけど、冷たく突き放されます。 知識が足りなさすぎるのですが、データをきれいにして早く次の処理を作らなくては いけなくて焦っています。 先輩たちはテレワークで、あまり質問もできず困っております。 どうぞよろしくお願いいたします。
697 名前:デフォルトの名無しさん (オッペケ Sr5f-HrHD) mailto:sage [2020/04/27(月) 23:45:46 ID:3fBcsBz5r.net] >>690 再生数少ないけど分かりやすいから初心者は見るべきだと思う schooのは微妙だけど
698 名前:デフォルトの名無しさん (ワッチョイ 4c2c-iUOt) mailto:sage [2020/04/28(火) 01:18:35 ID:7QVY/xgO0.net] >>691 Ruby なら、以下をscript.rb に書いて、 CSV データを、input.csv に書いてある時、 ruby script.rb input.csv と、シェルで実行すると、 require 'csv' file_path = ARGV[ 0 ] # 引数には、CSVファイルパスを渡す。input.csv # CSV ファイルを、1行ずつ処理する CSV.foreach( file_path ) do |row| puts "#{ row[ 0 ] } : #{ row[ 1 ] }" end 入力・input.csv あ,いう a,bc 出力 あ : いう a : bc
699 名前:デフォルトの名無しさん (ワッチョイ 7ab5-l81y) mailto:sage [2020/04/28(火) 02:18:31 ID:wtscQEd50.net] Sub ループuntil() Dim g As Long g = 3 Do Until Cells(g, 2) = "" Cells(g, 6) = Cells(g, 2) + Cells(g, 3) * 10 g = g + 1 Loop Dim ms As String ms = MsgBox(g & "回ループ", vbYesNo, "どうやら") If ms = vbYes Then MsgBox "更に練習", vbYesonly, "じゃあ" Else MsgBox "論外", vbYesonly, "てめーは" End If End Sub 何とか練習しつつ ここにきてデータ型が逆に混乱してきましたわ バリアントでごまかそうかな おやすみなさい
700 名前:デフォルトの名無しさん (ワッチョイ d98e-A1EL) mailto:sage [2020/04/28(火) 02:51:59 ID:ro9Vnp/Q0.net] >>691 こんな馬鹿に仕事をさせるのが間違い