X



Excel VBA 質問スレ Part51
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (スププ Sd4a-O827)
垢版 |
2017/11/08(水) 11:26:30.13ID:+KUB1/9hd

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part50
http://mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0293デフォルトの名無しさん (ワッチョイ 66b9-MbHU)
垢版 |
2017/12/01(金) 19:09:05.50ID:RC6w6Z/F0
A列の各セルの情報と合致するものが、C列に一件も無かった場合、
次に合致するデータが現れるまでA列の背景色を変え続ける

という処理なのでHanteiが要らない様に書き換えるって難しい気がするんだけど。
0295デフォルトの名無しさん (ワッチョイ 2aaf-1sOs)
垢版 |
2017/12/01(金) 19:49:15.65ID:4uYh51s/0
ちなみにこのコードはVBAエキスパート公式のだよ
0296デフォルトの名無しさん (ワッチョイ 2aaf-JjO2)
垢版 |
2017/12/01(金) 20:08:56.93ID:4uYh51s/0
似たようなソースコードを作ってみました
なぜだかエラーがでます

Sub test()

Dim i As Long
Dim j As Long
Dim U As Long

For i = 1 To Cells(Rows.Count, 1).End(xUp).Row
For j = 1 To Cells(Rows.Count, 3).End(xUp).Row

If Cells(i, 1) = Cells(j, 3) Then
U = 1
End If

Next j

If U = 1 Then
U = 0
Else
Cells(j, 3).ColorIndex = 3
End If

Next i

End Sub
0298デフォルトの名無しさん (ワッチョイ 9e9f-FJWj)
垢版 |
2017/12/02(土) 00:44:57.80ID:aL/u+cy30
>>293
確かに一致したものが無かったらだからBoolean使う方が自然か。
使わなくても簡単だけど自然なBoolean使うのが正しいわ。
俺も勘違いした。
ちなみに、一致せずに全てチェックしてjのループを終了した場合のjの値を調べればBooleanはいらんし、そもそもFind使ってループ1つにしてもいらん。

この仕様を見た場合、絶対こんなコード書かないけど、俺が書くとした場合の配列にぶちこむ方法はBoolean使うのが自然だな。

ちなみにランダムで10000行にデータ入れた場合、このコードで320秒、Find使う方法で22秒、配列入れる方法で9秒だった。
0299デフォルトの名無しさん (ワッチョイ eab3-JjO2)
垢版 |
2017/12/02(土) 01:37:25.51ID:jpak6rxd0
小学生がなんで3×5が15になるの?って聞いてるのに
俺なら電卓で答えだすぜ!って息巻いてる人のようにみえる
学習の初段階でつまずいてる人への的確な回答ではないわな
0300デフォルトの名無しさん (ワッチョイ 9e9d-9GJZ)
垢版 |
2017/12/02(土) 05:02:50.84ID:EvURnJTn0
なんつうか、これが俺の後輩なら、フローチャート書いてみって言いたくなるな
もうフローチャートなんて10年以上見てないけどな

>1なぜ変数を初期化するのか?
あってもなくてもこのコードなら動くけど
すべての言語が変数を初期化してくれるわけではないので、変数は必ず自分で初期化しろって作法もある
自分で初期化すれば、初期値を間違えて覚えていたりしてもバグになりにくいしな(Booleanの初期値はFalse)

>2なぜNextjでjだけループが終わるのか?
ちょっと質問の真意がわからん
ForとNextは1対1で対応するんで、Next jならjのループ終端だぞ

>3If Hantei Then (もしも変数の場合は。。。) もはや意味がわからない
IfとThenの間に書くのは、条件式と呼ばれる式(文じゃないよ)
式の値がTrueかFlaseで条件分岐する
そして変数はそれだけで式として成り立つ。この場合は変数の内容そのものが式の値
If Hantei=True Thenって書いても良いんだけど、(とくにBooleanに対する=Trueは)冗長だと言って嫌う作法もある

VBAはExcelが現役だから、いつまでたっても入門者が一定数いるよなぁ
はっきり言えば、今どきのブログラムの勉強にはVBAは向かないよ
0301デフォルトの名無しさん (ワントンキン MM7a-9NqV)
垢版 |
2017/12/02(土) 08:17:12.76ID:/lrBlva0M
ブック名 C:\book.xlsx
シート名 データ

説明文パート 1〜5行目

データパート
..ヘッダ A6〜Z6
..データ A7〜Z*
..データ件数 不定

プロバイダ Microsoft.ACE.OleDB.12.0

このような設定でヘッダとデータをselect文で全件取得するにはどうすればいいですか?
0302デフォルトの名無しさん (ワッチョイ 9e9f-w/Tc)
垢版 |
2017/12/02(土) 08:26:37.96ID:aL/u+cy30
>>299-300
超初心者の話かよ。
VBAエキスパートの話じゃなかったんか?

あと、If Hantei Thenを分からないって言ってるのは感覚の話で、君の説明じゃ分からないと思うぜ。
Hantei=Trueという式自体に値があって、それが正しい場合にその値は(Hantei=True)=Trueという結果になっているということが感覚的に分からないと理解できんだろ。
初心者はHanteiとTrueが等しかった場合と感覚的に理解してるんだから。
その感覚ではIf Hantei Thenが理解出来ない。
0303デフォルトの名無しさん (ワッチョイ 66b9-MbHU)
垢版 |
2017/12/02(土) 08:27:57.05ID:cPyK88Sm0
>>301
SQLで任意のセル範囲を取得する場合はFROM文で取得出来たはず。
SELECT * FROM [ データ$A6:Z1000] みたいな形。

ただその条件だとデータベースに投げる前にエクセル上で整形した方が効率いいと思うけど。
0305デフォルトの名無しさん (ササクッテロロ Spbd-1sOs)
垢版 |
2017/12/02(土) 09:32:03.18ID:1C3LInkCp
まず>>285のプログラムを動作順に日本語訳してくれよ
0306デフォルトの名無しさん (ワッチョイ 9e9f-w/Tc)
垢版 |
2017/12/02(土) 11:12:44.97ID:aL/u+cy30
>>305
簡単だろ。
A列のそれぞれのセルに対してC列に同じ値が無かったら色を付けてる。

1.A2からA列の最終セルまで1つ1つのセル(以下Aiとする)について以下を繰り返す。
2.C2からC列の最終セルまでにAiと同じ値が有ったときHanteiをTrueに設定。
3.HanteiがFalseの場合(C列にAiと等しい値はなかった場合)はAiに色を付ける。
4.HanteiがTrueの場合はFalseに設定。(どんな場合だろうがFalseに設定したいが、既にFalseなのにFalseに設定する必要は無い。単にFalseに初期化してるだけ。)
5.Aiの次のセルに対して繰り返し処理続行する。
0308デフォルトの名無しさん (ワッチョイ 66b9-MbHU)
垢版 |
2017/12/02(土) 11:45:34.19ID:cPyK88Sm0
エキスパート名乗ってる割にはバグくさいコードなんだよな。

If Not Hantei Then Cells(i, 1).Interior.ColorIndex = 6
Hantei = False

っていう書き方がたぶん本来意図した仕様に近いと思うんだけども。
0310デフォルトの名無しさん (ワッチョイ 9e9f-w/Tc)
垢版 |
2017/12/02(土) 14:09:12.13ID:aL/u+cy30
>>307
勉強してる奴が質問してるんであって、
このコードはそいつが書いたもんじゃない。
VBAエキスパート公式ってんだから、
資格の参考書かなんかに載ってるんだろ。

>>308
いや、この書き方自体は良くあるよ。
あんたのも間違いじゃない。
0313デフォルトの名無しさん (アウアウオー Sa12-WJoG)
垢版 |
2017/12/03(日) 08:02:30.09ID:Q2bt/ZXPa
エクセル相談所にあった質問で、とりあえずVBAなしじゃ出来ないって言っといったんだけど、VBAでリストの絞り込みって一度で出来る?
多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって事だと思うんですけど。
インターネットの選択方式でそんなの見た事あるけど一から開発するの面倒くさそう。
ユーザーフォームと2次元配列でも使えばできるかな?
ちなみにこの機能の名称あれば教えて欲しいです。
自分も配列すら参考書でかじったくらいでその必要性がわかってない初心者です
0315デフォルトの名無しさん (アウアウウー Sa21-zPcF)
垢版 |
2017/12/03(日) 09:19:50.58ID:lwbJHU3ya
お力添えをお願いします
チェックボックスでチェック入れたら行の高さを0にし、チェック入れなかったら13.5にしたいのですがうまく動作してくれません

Sub チェック8_Click()
Dim A As Boolean
Dim B As Boolean

If A = True Then
A = Rows(43).RowHeight = 13.5
B = Rows(44).RowHeight = 13.5
Else
A = Rows(43).RowHeight = 0
B = Rows(44).RowHeight = 0
End If

End Sub

どこが間違っているのかご教示お願いします。
0316デフォルトの名無しさん (ワッチョイ 1111-JjO2)
垢版 |
2017/12/03(日) 09:52:22.12ID:ObUuqjZI0
>>315

行は適当に変えてくれ

Private Sub CheckBox1_Click()

If CheckBox1.Value Then
Rows(3).RowHeight = 13.5
Rows(4).RowHeight = 13.5
Else
Rows(3).RowHeight = 0
Rows(4).RowHeight = 0
End If


End Sub
0317デフォルトの名無しさん (ワッチョイ 1111-JjO2)
垢版 |
2017/12/03(日) 10:04:41.09ID:ObUuqjZI0
>>315
フォームコントロールならこっちだわ
コントロール名は適当に変えてくれ

Sub チェック2_Click()
If Sheet1.CheckBoxes("チェック 2").Value = 1 Then 'これでダメなら下を試そう
'If "Sheet1".Shapes("チェック 2").ControlFormat.Value = 1 Then
Rows(3).RowHeight = 13.5
Rows(4).RowHeight = 13.5
Else
Rows(3).RowHeight = 0
Rows(4).RowHeight = 0
End If

End Sub
0318デフォルトの名無しさん (アウアウウー Sa21-zPcF)
垢版 |
2017/12/03(日) 10:11:57.07ID:lwbJHU3ya
>>317
ありがとうございます!!!こちらで動作しました!!本当に有難うございます!!!
0319デフォルトの名無しさん (ワッチョイ 6681-9GJZ)
垢版 |
2017/12/03(日) 10:42:36.13ID:HLUSF6su0
〉〉314
できるの?
入力規則の絞り込みじゃないよ?
階層化してリストから直接下層に移動(3段階くらい)して選択する方法だよ?
0322デフォルトの名無しさん (ワッチョイ 9e9f-FJWj)
垢版 |
2017/12/03(日) 11:39:56.54ID:JkBkmVnb0
>>312
違う。
そのコード書いた奴に向かって言ってるのと、躓いてる奴にはそのコードはよろしくないと言ってる。

何の例かは分からんが、もっと現実的なコードにすべきなんだぜ。
0323デフォルトの名無しさん (ワッチョイ 6681-9GJZ)
垢版 |
2017/12/03(日) 12:12:17.46ID:HLUSF6su0
>>320
しかも、わかりにくいかもしれないけど条件ちゃんと書いてあるんだけどね
入力規則の絞り込み検索じゃない。
階層ごとにクリック選択する事すらめんどくさいと言ってるんだよ。
一度の選択でリストの階層移動ができるかどうかを質問主は相談所で聞いていて
自分はVBAないとだめだよと回答したけどVBAだとどうなんだろうとこっち
で聞きなおしてみたんだけど、
0326デフォルトの名無しさん (ワッチョイ 6681-9GJZ)
垢版 |
2017/12/03(日) 13:54:27.80ID:HLUSF6su0
ちゃんと、VBAでリストの絞り込みって一度で出来る? こう書いて
その下に
多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって
こう書いてあるんだけど読み取れない?
しかも、前文にエクセル相談所にあった質問こうも書いてあるし。
で、わざわざVBAで聞いてるのにわからないかー
0327デフォルトの名無しさん (ワッチョイ 66b9-MbHU)
垢版 |
2017/12/03(日) 15:23:42.34ID:icSWQcwl0
具体的なコードが伴わない場合は外野がなんかゴチャゴチャ言っている程度に聞き流すべき。

>>321の質問はウィンドウズ標準のメニューバーみたいな形を想定しているみたいなので、
外部参照にMicrosoft Toolbarとかあれば、それを追加して解決するんじゃないかな。
0328デフォルトの名無しさん (ワッチョイ eab3-YtI1)
垢版 |
2017/12/03(日) 15:57:02.43ID:pXIsIngK0
>>326
> 多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって
マウス操作にはクリックも含むのが普通だと思うぞ

>>325
無駄なレスしてなにか楽しいのか?

>>327
あっちのスレ読めばわかるけどそもそも VBA 使わずにできるかどうかの問題になってるから Toolbar 云々の話ですらない
お前さんこそ聞き流すべき
0330デフォルトの名無しさん (ワッチョイ 9e9f-FJWj)
垢版 |
2017/12/03(日) 17:11:02.86ID:JkBkmVnb0
>>313
それは、VBAでも出来ないと思う。
というかWindowsの標準動作と違う。
似たようなのは出来るかもしれないけど。

コンボボックスじゃなくメニューなら出来るかな。
見ためが違うけど。
見ためをコンボボックスにしたいならコンボボックス使わずにフォ−ムに描画した方が楽じゃね?
コンボボックスだと選択しないとイベント発生させるのが難しいし、イベント発生時にブルダウンが閉じるのが通常動作だから。
サブクラスでHITTEST検出で出来るかどうか。

VBAではウルトラC級に難しい。
0332デフォルトの名無しさん (ワッチョイ 6693-bpph)
垢版 |
2017/12/03(日) 18:36:56.64ID:RpLqv7Ag0
>>313
階層付きMenuで3項同時に入力するってこと?
自分だったらContextMenuの改造またはPopupでやるかな。
見た目悪いけど、最下層をデリミタ区切りのフルセットにすれば
Splitして投げ込むだけでいいでしょ?
CellのContextMenuだとあとで標準に戻すこと考えないと
いけないので最近はもっぱらPopupばかり使ってる。
Cellのプルダウンだと表示数に限りがあるけど、Popupだと
画面サイズいっぱいまでいけるし、、
あ、もちろんCommandBarsのアレのことです。
0333デフォルトの名無しさん (アウアウオー Sa12-9GJZ)
垢版 |
2017/12/03(日) 22:48:18.35ID:DUCKYmEka
>>313
いえ、1つ目のリストを表示して、マウスの位置をその位置まで持ってきて
2つ目のリストを表示してって3つ目のリストを最終的に表示するみたいな。
エクセルの旧表示みたいな感じで、ファイル→検索みたいな感じです。
多分
0334デフォルトの名無しさん (ワッチョイ 6693-bpph)
垢版 |
2017/12/04(月) 00:43:15.26ID:oPXdl+lm0
>>333
いやだからそれって、階層メニューのことでしょ?
手近なところでいうと、、、たとえばFireFoxだと、

 表示 > テキストエンコーディング > 自動判別 > 日本語

みたいな。この手のMenuって、onMouseOverイベントで
下層が勝手に開いていきますよね。
それで各階層の選択肢を全部入力値として使うことじゃないの?
0335デフォルトの名無しさん (ワッチョイ 9e9f-w/Tc)
垢版 |
2017/12/04(月) 02:58:02.92ID:Fxj9yJGL0
そう、これはメニューの動作なんだ。
コンボボックスで実現するのはとても難しい。
ほとんどの奴は上級者でも不可能と言うだろう。

それとも俺の知らない何かがあるかもしれないけど。
0336デフォルトの名無しさん (ワッチョイ 6693-bpph)
垢版 |
2017/12/04(月) 03:21:07.64ID:oPXdl+lm0
コンボの配下にメニュー作ろうとすると怒られた。
階層メニューによる一括入力、自分でも使うかもと思い作ってみたよ。

1) 前提:質問者のリンク先キャプチャを参考
 A2:C2が回答入力欄
 キャプチャにある凡例を登録するための矩形範囲を"R_Master"とする。

2)呼出部:キャプチャのA1セルにある "商品"の文字列を右クリックで発動。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
 
 If Target.Resize(1, 1).Value = "商品" Then
  Cancel = True
  Call Popup_FullPut(Range("R_Master"), " 個")
 End If

End Sub
0337デフォルトの名無しさん (ワッチョイ 6693-bpph)
垢版 |
2017/12/04(月) 03:23:18.02ID:oPXdl+lm0
3)Menu生成部

Sub Popup_FullPut(rngMst As Range, Optional strUnit As String)
 Dim r As Range
 Dim i As Long, j As Long, k As Long
 With CommandBars.Add(Position:=msoBarPopup)
  For i = 0 To rngMst.Rows.Count - 1
   Set r = rngMst.Offset(0, 0).Resize(1, 1).Offset(i, 0)
   If r.Value = "" Then Exit For
   With .Controls.Add(msoControlPopup)
    .Caption = r.Value
    For j = 0 To rngMst.Rows.Count - 1
     Set r = rngMst.Offset(0, 1).Resize(1, 1).Offset(j, 0)
     If r.Value = "" Then Exit For
     With .Controls.Add(msoControlPopup)
      .Caption = r.Value
      For k = 0 To rngMst.Rows.Count - 1
       Set r = rngMst.Offset(0, 2).Resize(1, 1).Offset(k, 0)
       If r.Value = "" Then Exit For
       With .Controls.Add(msoControlButton)
        .Caption = r.Value & strUnit
        .OnAction = MkAction( "Popup_Input", rngMst.Address(external:=True),i & "|" & j & "|" & k )
       End With
      Next
     End With
    Next
   End With
  Next
  .ShowPopup
  .Delete
 End With
End Sub
0338デフォルトの名無しさん (ワッチョイ 6693-bpph)
垢版 |
2017/12/04(月) 03:24:02.05ID:oPXdl+lm0
4)入力実行部

Sub Popup_Input(strMst As String, strAns As String)

 Dim rngR1 As Range: Set rngR1 = Range("A2")
 Dim rngR2 As Range: Set rngR2 = Range("B2")
 Dim rngR3 As Range: Set rngR3 = Range("C2")
 
 Dim rngMst As Range: Set rngMst = Range(strMst)
 Dim i As Long, j As Long, k As Long
 
 i = Split(strAns, "|")(0)
 j = Split(strAns, "|")(1)
 k = Split(strAns, "|")(2)
 
 rngR1.Value = rngMst(i + 1, 1).Value
 rngR2.Value = rngMst(j + 1, 2).Value
 rngR3.Value = rngMst(k + 1, 3).Value

End Sub
0341デフォルトの名無しさん (ワッチョイ 6693-bpph)
垢版 |
2017/12/04(月) 03:41:24.99ID:oPXdl+lm0
Dim文のところではじかれるみたい、、

5)引数付きのOnActionコマンドの生成に普段使っている関数

Function MkAction( strCMD As String, Optional arg1 As String, Optional arg2 As String )

Dim DQ As String: DQ = Chr(34)
Dim SQ As String: SQ = Chr(39)
Dim buf As String

 buf = strCMD & " "
 If arg1 <> "" Then buf = buf & DQ & arg1 & DQ
 If arg2 <> "" Then buf = buf & "," & DQ & arg2 & DQ

 MkAction = SQ & buf & SQ

End Function

書き込めたかな?
Chr関数は禁則?
0345デフォルトの名無しさん (ワッチョイ a57b-JjO2)
垢版 |
2017/12/05(火) 20:57:29.50ID:dwGLun0F0
エクセルのVBAで、サーバー上にディレクトリを作成して、そこにファイルを移動させたいのですが、
MkDIRで作成できませんでした。どうすればよいでしょうか?
0347デフォルトの名無しさん (ワッチョイ a57b-JjO2)
垢版 |
2017/12/05(火) 21:34:50.27ID:dwGLun0F0
>>346 ありがとうございます!

dim myFSO as new filesystemobject
myFSO.CreateFolder (サーバー上のつくるディレクトリ名)でいけますか?
それともカレントドライブをサーバー上に移動すべきでしょうか?
0351デフォルトの名無しさん (スプッッ Sdea-gD61)
垢版 |
2017/12/06(水) 11:46:45.28ID:vAzWmOhld
関係ないけどブックを開くとイミディエイトウィンドウ上の変数が消滅するの困る
0356デフォルトの名無しさん (アウアウカー Sa55-FJWj)
垢版 |
2017/12/06(水) 23:12:55.48ID:ClwZMpdPa
>>355
正式にやるのは多分すごく難しい。
Win32APIでコンボボックス内のリストボックスに対してどうにかするということになると思う。

しかし、単純に
strCombo=ComboBox1.Text
ComboBox1.Clear
ComboBox1.Text=strCombo
でテキストが一瞬クリアされたのは見えないから現実的な案だと思う。
0357デフォルトの名無しさん (ワッチョイ ff81-iX7J)
垢版 |
2017/12/07(木) 10:43:49.53ID:cGZzJnMw0
シートの非表示設定について
Sheets(”sheet1").Visible = False
でシート非表示設定をしたのですが元々非表示だとバグになってしまいます。
釦を押せば特定のシートのみを表示できるようにしたいんですけど表示時非表示時がランダムで
非表示時でもそのコード無視するかと思ったら非表示なのに非表示にするんじゃねぇと怒られた。
0358デフォルトの名無しさん (ワッチョイ bf9f-F7Qh)
垢版 |
2017/12/07(木) 10:55:46.75ID:SgQPpSGG0
>>357
VisibleプロパティがBooleanで状態を返すのでIfで分岐させる

If Sheets("sheet1").Visible Then
Sheets("sheet1").Visible = False
Else
Sheets("sheet1").Visible = True
End If

こうすると実行するたびに表示/非表示が切り替えられる
0359デフォルトの名無しさん (ワッチョイ ff81-iX7J)
垢版 |
2017/12/07(木) 11:24:06.29ID:cGZzJnMw0
>>35
ありがとうございます。できました。
なんとなく、if文使うのかなと思ったのですがif文が思いつかなかった。
Elseの下を消すことで、非表示時は非表示のままのする思い通りの事が出来ました。
0361デフォルトの名無しさん (ワッチョイ bf9f-F7Qh)
垢版 |
2017/12/07(木) 12:06:28.65ID:SgQPpSGG0
>>359
たぶん他人にも使わせるのだと思いますが
シートをシート名じゃなくオブジェクト名で指定すると
誰かが勝手にシート名を変えても関係ないのでオススメ。
さらにわかりやすいオブジェクト名に書き換えると、尚良し。
オブジェクト名はVBEのプロパティウィンドウの(オブジェクト名)を見てね。
初期値はSheet1なので
Sheets("sheet1")をSheet1に置き換えてもうごくはず。

>>360
あとから余計なこと書いたかなーと思ったけど、本人が気づいてくれてよかった。
0362デフォルトの名無しさん (ワッチョイ ff81-iX7J)
垢版 |
2017/12/07(木) 13:06:30.92ID:cGZzJnMw0
〉〉361
ど素人で何もわからないままマクロの記述させながら必要なところ
コピペしてとネットコピペでほとんどコード打ち込まず作ってるので
まだ、オブジェクトまで触ってません。
今度触ってみたいと思います。
標準モジュールは逆になんのモジュールかわからなくなるの必要なモジュールと区別するために名前つけてるけど
sheet名はそのままです。
0364デフォルトの名無しさん (スフッ Sdbf-JIMd)
垢版 |
2017/12/07(木) 22:24:29.94ID:QxT2u2P9d
>>363
マジ気になるわー
V字になってるのか、真ん中で2段になってんのか、前後に生えてんのか?
1本は普通だが、もう1本はデコに生えてんのか?
0365デフォルトの名無しさん (アウアウオー Sadf-QeeD)
垢版 |
2017/12/08(金) 00:07:26.11ID:8mEkhztWa
コードのコメントについて
どこまで記入してますか?
素人なもんで変数の内容から
変更前のコードまでコメント化してるからコード自体が長くなる。
社内のVBAコード見るとコメントほとんど書いてなくてf8で追っても、よくわからないからなにがいいか分からない
0366デフォルトの名無しさん (ワッチョイ ffb9-LVSJ)
垢版 |
2017/12/08(金) 00:27:27.18ID:tPe4A27O0
設計さえキチンとしていれば大抵はコメント要らない。

Dim SLine As Long:SLine = 3 '読み込むファイルのヘッダーが二行ある為

みたいにプログラム依存でないパラメータを解説する時に使ったりはする。
ある程度の習熟が必要なので、ステップ実行でも何してるか分からない(正常に追えない原因が分からない)のであれば、
まだコメントの必要性について論ずる段階では無いので特に要らないんじゃないかな。

自分の昔書いたコードを改修しようとして訳分からないみたいなのを何度も経験して始めてコメントの要点が掴めると思う。
0367デフォルトの名無しさん (JP 0Hbb-LgyW)
垢版 |
2017/12/08(金) 00:40:24.89ID:MH/bn/0fH
>>365
変数名からなるべく中身を類推できるようにつけてコメは最小限にしてる。
後で迷うくらいならつけたほうがいいと思う。コード記述して直後は完全にわかってるから迷うポイントに気づけない。一週間後とかに再レビューして、「コレなにやってんだろ?」と引っかかった所はポイントかな。
あとExcel本体の不具合、制限回避とかコメしてないと中々思い出せないことがある。
0368デフォルトの名無しさん (ワッチョイ bf9f-MQ7n)
垢版 |
2017/12/08(金) 00:50:05.27ID:04xg1k3G0
コメントは書いた方が良いんだが、余計なのはいらない。
変数名で分かるものは必要ない。
むしろどういう処理かのコメントを書く場合が多い。
それもそこのメンバーのレベルによる。
書ける奴らが集まってるなら、こんなもん分かるだろと書かない場合も多い。
0369デフォルトの名無しさん (アウアウイー Sa8b-W7LT)
垢版 |
2017/12/08(金) 08:12:21.44ID:WX0K1LcLa
コメントは処理の内容についてはしない
なぜその処理をするのかつかみにくいとリッキーだったり使用上やむを得ないときに理由を簡潔に書く
変更履歴をコード上に書くのは愚の骨頂だけどVBAだとほかに方法が少ないから自分かチームでルール決めるしかないな
0371デフォルトの名無しさん (スプッッ Sd3f-sF5C)
垢版 |
2017/12/08(金) 18:16:29.95ID:3k7CQU1Hd
質問です。
シミュレータソフトをVBAを使って制御しています。順々にモデルを解析していき、逐次計算結果がエクセルに反映表示されるような動作をします。
ただそのとき、きちんと逐次結果が表示されていく場合と画面に全く結果が表示されずプログラムが終わった途端に一気に数値が表示される場合とがあります。
途中でも解析結果が分かるよう安定して逐次表示するようにしたいのですが解決策分かる方いたら教えてください。

なお画面更新はもちろんオンです。調べたところdo eventsというのでWindowsに制御を渡すやり方もあるようですが、途中の動作が割り込む可能性がありそれは避けたいです。
0372デフォルトの名無しさん (アウーイモ MM1b-CLVY)
垢版 |
2017/12/08(金) 19:13:35.05ID:jJUgyerEM
自分も普段はほとんどコメント書かない。
適切な命名とコードの流れで処理は説明して、意図や補足説明にコメントを書くのが正しいと思ってる。
ただ、VBAではかなり細かく書いてる。理由は、VBAの時点でどうやっても読みづらいから。
勝手に行間調整するせいで
int n
WorkBook book
みたいな整列ができないし、Dim n As Integerって構文自体が無駄な単語多くて、数並んでいると読む気がなくなる。
スコープの区切りにEndを使うのも()よりコードに埋もれて見づらいしVBEの色設定は貧弱だし。
VBAに限ってはコメントで処理追った方が楽だって最近は思ってる。
早くエクセル操作に向いたもっとまともな言語出ないかな。
0375デフォルトの名無しさん (ワッチョイ 37c3-gbWp)
垢版 |
2017/12/08(金) 20:15:19.13ID:F+K0Jtko0
>>374
そうではなくて、変数の宣言構文がシンプルではないところを言っていると思うよ。
0376デフォルトの名無しさん (スップ Sd3f-6IXG)
垢版 |
2017/12/08(金) 20:45:47.90ID:kuqPkTCcd
やれやれ、また長い関数を書いてしまった
0379デフォルトの名無しさん (アウアウカー Saeb-ipAI)
垢版 |
2017/12/09(土) 01:39:08.64ID:vu3Y0INla
>>371
それじゃコメントのしようがない。
どんな風に制御しているのかとか、結果はそのシュミレータソフトから取ってきてるんだろうけど、そこから逐次結果が得られてるのかとかの詳細が分からんと何とも言えない。
0380デフォルトの名無しさん (スップ Sd3f-6IXG)
垢版 |
2017/12/09(土) 11:52:36.39ID:oQ1pndO0d
Debug.Print もApplication.Statusbar もちょっと処理が重くなってくると表示が止まって役に立たない
0382デフォルトの名無しさん (アウアウオー Sadf-QeeD)
垢版 |
2017/12/09(土) 20:32:20.11ID:uW7BpcjHa
コメント関連ありがとう。
もう、人には見せない用だけどくどいくらいコメント書きまくってるw
0383デフォルトの名無しさん (アウアウオー Sadf-QeeD)
垢版 |
2017/12/10(日) 08:18:11.50ID:PzHPENwqa
VBAの開発環境について
デバッグ作業してると2画面欲しくなるんだけど皆さんどうしてる?
vBEの画面と通常の画面をフルスクリーンで見たいし、VBEもコード書き込む画面のほかに現在の変数が分かる画面と実行結果が分かる画面が欲しいからノート1台でやってると画面グチャグチャ
0385デフォルトの名無しさん (ワッチョイ bf9f-F7Qh)
垢版 |
2017/12/10(日) 09:29:22.82ID:s+zBVK9X0
モニタ2枚でやってるけど
ツールボックスのウィンドウとかフォームが画面の境界に表示されたりして
地味に対応していない感を醸し出してる。
フルHD以上なら1枚でもVBEを端っこによけておけば窮屈じゃないと思う。

それよりエディタの貧弱ぶりをどうにかしてほしい。
今時のIDEを触ると、VBEはふた昔前のオマケ機能なんだなと思い知る。
0388デフォルトの名無しさん (ワッチョイ 3703-ZqID)
垢版 |
2017/12/10(日) 19:23:33.18ID:RKQe6ZfS0
バグ発生に関与する要因としてコードの量のみを気にかけている
→ 初心者またはそれに準ずる低スキルのもち主

>>386を受けてバグが一切発生しない事を想定している
→ 0か100でしか物事を考えられないアスペ

デバッグをデバグと言っている
→ ガチのジジイか極端にセンスの悪い意識高い系

たった一言でここまでプロファイリング出来ました
0389デフォルトの名無しさん (アウアウオー Sadf-QeeD)
垢版 |
2017/12/10(日) 20:54:53.56ID:DUp9AezHa
え??コード書き書きしたら一度も動作チェックしないで実装するの?
すげー!
ほぼ途中で止まって黄色くなる身としては信じられない.
全ての動作の確認と変数の動作に変な所がないか見るの楽しい.
それに人が書いたコードで動作チェックするにもf8必要だし
ただ、F8連打も大変だから超ゆっくり動作する機能でもあればいいのに
0392デフォルトの名無しさん (ワッチョイ ffb9-LVSJ)
垢版 |
2017/12/10(日) 22:28:29.51ID:rJurKCVR0
リリース版を出すかどうかをデバグ作業と呼ぶかどうかの境界線にしてるって事なのかな?

バグまみれでリリースして、ネット経由でパッチを当てるのが当たり前になった事が原因で、
そういう感覚が生まれたって考えるとなかなか興味深い現象だな。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況