[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 12/08 10:06 / Filesize : 292 KB / Number-of Response : 1011
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part65



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
こんな馬鹿に仕事をさせるのが間違い






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<292KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef