Excel VBA 質問スレ Part49©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/06/26(月) 02:15:14.60ID:T3ylemnb0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

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

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

※前スレ
Excel VBA 質問スレ Part48
http://mevius.2ch.net/test/read.cgi/tech/1494890685/

※関連スレ
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/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/07/01(土) 00:29:13.54ID:QYfDEdV/0
それは数学の知識の問題だと思うので、別にできなくてもいいと思う。多分一生役に立たない
でも最小二乗法とか漸近線、偏差値など、統計学的な知識はあったほうが良いと思う
2017/07/01(土) 04:46:24.33ID:PtoY4rVn0
>>53
昔、某掲示板で質問した人に話の内容から初心者として扱ったらその資格持ってるとのことでびっくりしたことがある。

どんな資格でもそうだけど、そういうもんなんでしょう。
そうしないと受かる奴いなくなっちゃう。
2017/07/01(土) 04:52:54.03ID:PtoY4rVn0
>>60
そんな問題が実際の案件に出てきた時に最適なコードが書ければ良いでしょ。
それにその程度の話ってググレば出てくるでしょ。

そんなのは何かあったよなと思うことが出来てググレればOK。
それよりも上手いやり方に気付かずにクソコード書く奴は多い。
64デフォルトの名無しさん (オッペケ Sr71-UM0m)
垢版 |
2017/07/01(土) 08:01:59.81ID:JGSuKZu6r
>>63
自分のクソは棚上げかクソw
2017/07/01(土) 08:05:36.28ID:3teBbQmJ0
>>64
お前は試験も仕事も両方苦手みたいだな
2017/07/01(土) 08:23:17.10ID:qXTa/p8N0
>>57
実地試験ってどんなことやるの?
2017/07/01(土) 08:38:38.91ID:QYfDEdV/0
>>66
支店名 状態 月 売上
A支店     3 200
B支店     3 10
C支店     3 500
A支店     4 300
B支店 閉店 4 0
C支店     4 600

4月の売上平均を求めよ(制限時間5分)
って感じ。

D1=(300+0+600)/3
にはたまげた。もちろん関数を使わない人はアウト

B支店を入れるかどうか疑問に思えば合格
2017/07/01(土) 08:58:05.68ID:qXTa/p8N0
>>67
関数?
VBA の試験なのに?
2017/07/01(土) 08:59:25.55ID:QYfDEdV/0
>>68
あぁすまん、ここvbaスレか。Excelスレと思ってた。忘れてくれ
2017/07/01(土) 10:42:47.44ID:r7UjQGgF0
エクセルのある部分をリストボックスにしたいのですが、rowsourceで設定すると、間に空白が多くなった時に使いにくいです。
そこで下記のように空白だったら、リストに加えないとしたら、リストに何も出てきません。
どこがおかしいでしょうか? RowPN(i)には既にエクセルの1セルの値が167個入ってます。

i = 1
i1 = 1
Do Until i > 168
On Error Resume Next
If RowPN(i) <> "" Then
UF6ComboBox1.AddItem RowPN(i), i1
i1 = i1 + 1
End If
i = i + 1
Loop
2017/07/01(土) 11:20:29.10ID:PX/A+v/i0
VBAの試験って、やっぱ何らかの制限付きなんだろうか。
制限しないと、ソートにSQLとか、Worksheetfunctionとか、
Cells(1,1).Value="計算式"とか、正解だけど、試験の趣旨としてどうなの?
という答えが沢山出来てしまう。
2017/07/01(土) 11:27:20.68ID:+dYABl5A0
>>70
・RowPNの中身が全て""またはEmptyになっていないか。
 Dubug.Printまたはローカルウィンドウでの確認を推奨する。
・リストボックスと言っているが変数はUF6ComboBox1で合っているか。
・RowPNの要素が(0 To 166)ないし(1 To 167)だとDoループがi=168までカウントするのでインデックスエラーになる。
 For文の方が無難そうに思えるのと、ここでOn Error Resume Nextはどうかと感じる。
2017/07/01(土) 11:30:18.64ID:5ubPuGy00
>>70
セルから値をとってるならこれでいいと思われ

Dim i As Long

For i = 1 To 168

 If Cells(i, 1) <> "" Then

  ComboBox1.AddItem Cells(i, 1)

 End If

Next
2017/07/01(土) 11:30:59.20ID:+dYABl5A0
>>72 3行目間違い。。
? Dubug.Print ○ Debug.Print
2017/07/01(土) 11:45:10.97ID:+dYABl5A0
>>71
ググればすぐわかる。
なんか1日対策勉強したら余裕そう。
2017/07/01(土) 11:48:18.71ID:r7UjQGgF0
>>72 >>73 ありがとうございます。 値は入ってるのは確認しました。FOR文も空白ですね・・・。
シート使っているので、そこに1エリア儲けて、空白除いて再整列させて、ROWSOURCEで設定してみます。
2017/07/01(土) 12:12:06.78ID:PX/A+v/i0
>>75
いきなりサンプル問題で躓いたwwwwwwww
セルの範囲指定で「"A1:B1"」以外に「"A1","B1"」も使えるとか知らんわwwwww
2017/07/01(土) 12:14:29.98ID:5ubPuGy00
>>76
その方法で納得ならいいですが

配列に入っているなら
On Error Resume Nextで
コントロールを参照できないのでエラーしているのを
すっ飛ばしているのではなかろうか。
つまり>>72が言っているようにUF6ComboBox1は存在しないのでは。
On Error〜をコメントアウトしてみてはどうか。

と思う。
2017/07/01(土) 12:28:18.39ID:r7UjQGgF0
>>78 オブジェクト名は間違うと動かなくなるので、いつもコピペしてるんですよ。
とりあえずシート使って逃げて、rowsourceでうまいこと動きました。
80デフォルトの名無しさん (ササクッテロラ Sp71-THY3)
垢版 |
2017/07/01(土) 14:17:52.99ID:zDfIbROqp
>>61
数学の知識というより再帰関数とかのプログラム技術の問題
2017/07/01(土) 23:37:04.61ID:AhlbWWig0
こんばんわ、
シティーボーイズやってました、再帰しげるです
82デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
垢版 |
2017/07/02(日) 02:18:34.32ID:mbMXyeDF0
こんばんわ、
膣に挿入したら動きません、きたろうです
2017/07/02(日) 05:10:18.40ID:7bfaC3yX0
突然 なんだ!
84デフォルトの名無しさん (アウアウウー Sa25-k1q/)
垢版 |
2017/07/03(月) 17:11:55.95ID:3aAVlqxCa
以下のプログラムで「該当するセルが見つかりません」となってしまいます。
該当するセル範囲のセルはすべて空白です。
期待する動作は、「B4:B6の範囲の空白セルにコメントを入れる」です。
Sub commentAddToBlankCells()
____On Error GoTo ERROR_ALL
____Range("B4:B6").SpecialCells(xlCellTypeBlanks).AddComment "目視確認"
____Exit Sub
ERROR_ALL:
____MsgBox Err.Description
End Sub
※Excel2010です。
2017/07/03(月) 17:42:48.19ID:3aAVlqxCa
Excelのバグのような気がしてきました。
2017/07/03(月) 18:37:30.90ID:C0KljlGTM
>>84
2007だけど、ActiveSheet.UsedRangeの範囲外のセルだとエラーになるっぽい。
2017/07/03(月) 20:07:31.53ID:Gbz1GVYR0
ここの板で質問するレベルでExcelになすりつけるのは100000年ほど早い
まぁそう言いたくなるときもあるんだがw
2017/07/03(月) 20:26:22.35ID:NJa6/A120
それ範囲指定できるんだっけ?
2017/07/03(月) 20:33:45.35ID:S8hpBEzs0
例えば、
そのセルの値が0より大きければセルA1をコピーし、そのセルに書式を貼り付け、
そのセルの値が0より小さければセルA2のコピーし、そのセルに書式を貼り付ける。

この程度の処理を数百のセルに行うのに結構な時間がかかる。
短時間で完了させるにはどうしたらいいんでしょうか?
ある程度のセル範囲ごとにまとめて書式貼り付けすればいいんでしょうか?
2017/07/03(月) 20:38:08.97ID:MkRtof65M
>>89
正確な日本語でよろしく
2017/07/03(月) 20:39:25.48ID:u6VhpuAl0
Sub nisinsu()
Dim Z As Single, S As Long, N As String, A As String
Z = 100
S = 1
Do Until Z <= 0
N = Z Mod 2
Cells(S, 1) = Z
Cells(S, 2) = N
Z = Z \ 2
S = S + 1
A = N + A
Loop
Cells(1, 3) = A
End Sub

上の方で2進数について質問したものです
このコードである程度無事に解決しましたが、一つ分らないことがあります
Loop を抜けた後の Cells(1, 3) = A の所は Loopの一つ上の A = N + A によって 1100100 と正しい数字が表示されます
しかしこの A = の中を A = A + N というように A と N を逆にすると 10011 と全く別の数字になってしまいます
この理由がどうしてなのかを教えてください
92デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
垢版 |
2017/07/03(月) 20:39:42.65ID:c364q6zP0
>>89
性格悪い日本語でよろしく
2017/07/03(月) 20:45:47.19ID:MkRtof65M
>>91
まずはおめでとう!

質問についての回答は単純に逆転してるだけだよ
1100100となるところが0010011となってしまいそのまま表示させたら頭の0が消えたって感じ
2017/07/03(月) 20:54:20.38ID:MkRtof65M
>>89
あー読み取れた
VBA使うまでもなく条件付書式使えば終わり
2017/07/03(月) 21:15:28.35ID:TQ7WGTgT0
>>89
多分これでOK

Application.ScreenUpdating = False
処理
Application.ScreenUpdating = True
2017/07/03(月) 21:15:43.91ID:S8hpBEzs0
>>89です
>>90>>92>>94
わかりにくかったですか、すいません。かなり酔ってます。

一日200行ぐらい増えるブックがあります。列数は50ぐらいです。
一ヶ月で6000行ぐらいでしょうか。あらかじめ条件付き書式を設定していましたが、
なんかブックを開くときに重くて、きっと条件付き書式が原因だろうと思い、
条件付き書式ではなく、VBAで各セルの値に応じて書式を固定しようと思ったわけです
でも、そのVBAが時間がかかって困ってるわけです。
書式のコピペって時間かかるんですね。
もっと書式のコピペを早くできる方法はないのかなって思ったわけですわ。
2017/07/03(月) 21:28:10.61ID:3g7k10jb0
>>96
書式コピペするんじゃなくて、直接指定したらまだ速くなると思うよ
クリップボードを介する処理はとても時間がかかる
2017/07/03(月) 21:40:24.58ID:MkRtof65M
>>96
こんな単純な条件ひとつだけで重くなるわけがない
問題は別にあるよ
2017/07/03(月) 21:49:40.34ID:wrAlhZZL0
>>96
条件付き書式が断片化してない?断片化ってのは勝手に作った言葉だけど・・・
例えば、A:Aに条件付き書式(=a1=1)を設定して、10行目を切り取って11行目に挿入したりすると
条件=A1=1
=$A$1:$A$10,$A$12:$A$1048576

条件=A11=1
=$A$11

のように分割される
一度条件付き書式の書式ルールの管理、「このワークシート」を見てみたほうがいいかも
2017/07/03(月) 21:55:55.71ID:We00lT8WM
そのセルにちゃんとワークシート名付けてる?
2017/07/03(月) 22:20:14.51ID:S8hpBEzs0
>>97
明日試してみます。
>>98
そうですか。試行錯誤してみます・・・
>>99
レスの内容が難しいです。えっと、ちょっと考えさせてください。
>>100
つけてるはずです。
2017/07/03(月) 22:23:39.09ID:S8hpBEzs0
今のコードはこんな感じです。

Public Sub シートの書式を設定する()
Dim iRow As Long, iCol As Long, LastRow As Long, ws As Worksheet, r As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Set ws = ThisWorkbook.Worksheets("対象シート")
startRow = 4
LastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row
For iRow = startRow To LastRow
For iCol = 4 To 100
Set r = ws.Cells(iRow, iCol)
If IsNumeric(r.Value) Then
If r.Value > 0 Then
r.Select
ws.Cells(1, "C").Copy
r.PasteSpecial Paste:=xlPasteFormats
DoEvents
ElseIf r.Value < 0 Then
r.Select
ws.Cells(2, "C").Copy
r.PasteSpecial Paste:=xlPasteFormats
DoEvents
End If
End If
Next iCol
Next iRow
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
2017/07/03(月) 22:28:05.66ID:9w7qW4Z10
>>96
>なんかブックを開くときに重くて

例えば、知らない間に、図形が1万個くらいに増殖しているとか。
いや、マジで。
2017/07/03(月) 22:41:18.92ID:NJa6/A120
なんでいちいちdoeventsしてんの?
105デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
垢版 |
2017/07/03(月) 22:43:07.60ID:c364q6zP0
あ〜万個増殖ね〜ありがちだわ〜
2017/07/03(月) 22:46:45.91ID:S8hpBEzs0
>>104
あー、DoEventsuはマクロ実行終わるまで時間かかるんでEscでマクロ止めてた時の名残です。
今は必要ありません。消し忘れてました。
2017/07/03(月) 23:22:39.55ID:u6VhpuAl0
>>91
すみません…
まだ勉強し始めたばかりで何故入れ替えただけで逆に表示されるのかが分かりません
理由を教えて下さりますと幸いです
2017/07/03(月) 23:23:15.28ID:NJa6/A120
ん〜
まずはループが最終的に何回転してるのか見てみた方が良さそう

自分ならまず新しいファイルにコードをコピペしてゴミ掃除するが
2017/07/03(月) 23:58:29.09ID:MkRtof65M
>>107
コレを動かしてみたらわかるよ

Sub nisinsu()
Dim Z As Single, S As Long, N As String, A As String
Dim AA As Single
Z = 100
S = 1
Do Until Z <= 0
N = Z Mod 2
Cells(S, 1) = Z
Cells(S, 2) = N
Z = Z \ 2
A = N + A
Cells(S, 4) = A
AA = AA + N
Cells(S, 5) = AA
S = S + 1
Loop
Cells(1, 3) = A
End Sub
2017/07/04(火) 00:10:14.68ID:pX4cRUUJ0
>>102
<0と>0をUnionでまとめてからコピペしたら速くなりそう。
ただUnionのセル数が増えすぎるとUnion自体が遅くなるみたいなので、1〜数十行くらいで区切ったほうがいいかも?

まあ>>97のほうが速い気はするけど。
2017/07/04(火) 05:36:03.11ID:JPw87neNM
これって今何行あるの?
何万行もあって列数50あれば大分重くなると思うけど
2017/07/04(火) 06:53:55.04ID:SZEZ7cdP0
6000回もselectとcopyしてりゃ遅くなるの当たり前
113デフォルトの名無しさん (オッペケ Sr71-nSMp)
垢版 |
2017/07/04(火) 08:12:48.47ID:n1qpisHfr
田のクラッカー
2017/07/04(火) 10:15:18.62ID:hKxheJiwa
セレクトなくしたら2/3ぐらいにはなりそうだな
まあどう考えてもコピペはロスがでかい
指定する書式はマクロの記録か大抵ググりゃ出てくるから調べんさい
2017/07/04(火) 20:20:52.61ID:aFK9C0z90
>>89>>102です。

>>103 図形のオブジェクトはありませんでした。でも変なオブジェクトが多量に残っていたという経験は過去にありました。確認してみます。
>>110 Unionでまとめて処理ですか。試してみます。>>97と比較してみます。
>>111 実際の行は数千行ありますが、実際には最終行から200行しか処理してません。後出しになりますが>>102ではその部分を省きました。ごちゃごちゃするかなと思い・・・
2017/07/04(火) 20:21:31.96ID:aFK9C0z90
>>89>>102です。

>>112 直接書式を設定したほうがよさそうですね
>>114 >>97を試してみます

みなさまありがとうございました。土日に試してみます。諸事情で今は試せないので。
2017/07/04(火) 23:04:48.45ID:n6RB6fUl0
>>116
頑張ってベターな方法探してね!
2017/07/05(水) 00:29:10.07ID:VBidwpfq0
ベタな方法を探す?
119デフォルトの名無しさん (アウアウウー Sa25-k1q/)
垢版 |
2017/07/05(水) 10:23:55.19ID:jMcI5nQfa
ダブルクリックとシングルクリックを区別する処理を考えましたがあまり
美しくないです。もっとスマートな方法はありますか?
VDim isDoubleClick As Boolean
Dim cancelClick As Boolean
Private Sub CommandButton1_Click()
____Dim i As Long
____For i = 0 To 2048
________DoEvents
________If isDoubleClick = True Then
____________Exit Sub
________End If
____Next i
____If (cancelClick = False) Then
________' シングルクリック時の処理はここ
________Worksheets(1).Range("a1").Value = "シングルクリック"
____End If
____cancelClick = False
End Sub
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
____isDoubleClick = True
____' ダブルクリック時の処理はここ
____Worksheets(1).Range("a1").Value = "ダブルクリック"
____isDoubleClick = False
____cancelClick = True
End Sub
Private Sub UserForm_Initialize()
____isDoubleClick = False
____cancelClick = False
End Sub
2017/07/05(水) 11:03:35.66ID:bK7Vkfgva
>>119
vba クラス コントロール イベント
とかでググれば
2017/07/05(水) 13:18:10.58ID:r0cXYB/2H
>>119
内容と全然関係ないけど、全角スペースでインデントすれば削除されないよ
2017/07/05(水) 16:49:43.67ID:F7dOY4NYa
>>120
ありがとうございます。質問そのものについてはタイマー張ることで実現
できることがわかりました。
また、イベントハンドラをまとめる方法もついでに知ったので助かりました!
>>121
次からそうします。ありがとうございます。
2017/07/05(水) 22:43:43.51ID:kJzSrAyN0
セルの値を配列に入れる時、
セルが1つだけだと、一次元配列になっちゃうってひどくね。
2017/07/05(水) 22:47:37.84ID:VdD8AIen0
次元数が変化するとめんどくさい時は、常に同じ次元数になるようにfunctionを噛ませる
125デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
垢版 |
2017/07/05(水) 22:49:15.43ID:odMt6Ynp0
セルが2つだと二次元配列になっちゃうよ
126デフォルトの名無しさん (アウアウウー Sa25-k1q/)
垢版 |
2017/07/05(水) 23:46:14.85ID:F7dOY4NYa
DAOとADOの使い分けを教えて!
2017/07/06(木) 00:36:18.68ID:in8T4yu80
使い分けというかADOはDAOに比べて何かと便利だからADOだけ使えばいいんじゃないかな。
AccessだとデフォがDAOなんで使う事も多いけどエクセルで使うときのメリットは特に思い浮かばない。
2017/07/06(木) 00:50:14.75ID:J3gAfYSVa
>>127
回答ありがとう。今はMySQLに接続しようとしているのでADOを選びます。
まだVBA始めて4日目なのでわからないことばかりですが
2017/07/06(木) 02:37:48.69ID:2ggUG7GkM
>>123
Resizeで1行追加して、配列を1行減らせばいいんじゃないかと思った。
2017/07/07(金) 06:50:33.44ID:k9X/9vlT0
すいません
パソコンのエクセル2016で作ったVBAをスマホで動かすことはできますか?
スマホでVBAの作成編集は無理のようなので
2017/07/07(金) 07:44:52.11ID:6QLBDLc9d
>>130
むしろ教えてもらいたい
2017/07/07(金) 08:54:05.14ID:KQxBqvcO0
関数でがんばれ
2017/07/07(金) 21:24:02.96ID:IxSbuhab0
>>130
基本的に無理じゃね。
スマホ側OfficeがVBAサポ―トしてないと。
その上でWin32API使用してたら、更に無理だし。
2017/07/07(金) 21:25:43.56ID:t0FXhP6Gd
ノートでも画面狭く感じるのにスマホでなんてストイック過ぎる
2017/07/07(金) 22:19:46.83ID:02peKi+J0
アリエッティだから…
136デフォルトの名無しさん (ワッチョイ 778b-QU0D)
垢版 |
2017/07/07(金) 23:07:11.35ID:tdv0VtnU0
ネゴシックスだから…
137デフォルトの名無しさん (ワッチョイ 97ea-okny)
垢版 |
2017/07/07(金) 23:13:49.66ID:q3zfwuJv0
vbaってエクセル用の言語?
他にも使えるの?
2017/07/07(金) 23:24:32.16ID:IHJ5BTGs0
アクセスやワードでも使えるよ
アクセスvbaはたまによく使う。SQL覚えたほうがいいけど
ワードはワード自体使わん
139デフォルトの名無しさん (ワッチョイ d701-LW04)
垢版 |
2017/07/07(金) 23:41:29.01ID:cLxiai6C0
初歩的な質問で、すみません。

vbaの公式本で独学で勉強中なのですが、
なぜこうなるのかわかりません。
よければ教えてほしいです。

不明点:

@なぜnumがセルa1〜a3だと認識されるのか。
b1〜b3も記述しているので、b1〜b3と認識されないのはなぜか。

Aこういうもんだと言われればそれまでなのですが、
ほかにもnum以外に自動認識されるような用語はあるのでしょうか。



Sub sampel()

 Range("b1") = percent(Range("a1"))
 Range("b2") = percent(Range("a2"))
 Range("b3") = percent(Range("a3"))

End Sub

Function percent(num) As String

 percent = num / 100 & "%"

End Function
2017/07/07(金) 23:52:29.75ID:02peKi+J0
関数 percent(num) で呼び出しもとで
引数 numに Range("a1") をセット(厳密には違うか)してるから


って釣りだよな
2017/07/07(金) 23:55:59.29ID:IHJ5BTGs0
>>139
残念ながらかなり根本的な事がわかっていない

function〜はユーザー定義関数っつって、処理をひとまとめにしたもの

numってのは変数名。これは自分で決めるもので、
「num」でも「namu」でも「ナンバー」でもなんでもいい。
「sub」「if」みたいな単語は予約語と言ってそれらは使えないんだけど、まぁ何となく分かるだろう

毎回'こう書くのがめんどくさいから
Range("b1") = Range("a1") / 100 & "%"
'functionを定義して、使い回しできるようにしているだけの話
Range("b1") = percent(Range("a1"))

function作るのめんどくさくね?
と思ったかもしれないけど、それは何もわかっていないだけ
素直にこういうもんだと覚えてくれ
142デフォルトの名無しさん (ワッチョイ d701-LW04)
垢版 |
2017/07/07(金) 23:57:08.34ID:cLxiai6C0
すみません。意味が分かりました。
2017/07/07(金) 23:58:31.41ID:J/by2x1N0
>num以外に自動認識されるような用語


自動認識されるような用語って何?初めて聞いた
2017/07/08(土) 00:00:19.52ID:lNWyFXj50
>>142
良かった、頑張ってねぇ〜
2017/07/08(土) 00:06:47.50ID:13H3LMpq0
>>143
AレジスタとかBレジスタとかと想像してみる

>>142 ほ、ほんとに初心者だったのかスマン
2017/07/08(土) 00:07:48.82ID:ieaMtMqy0
>>143
多分だが、引数を理解できてなくて
numに勝手にマッピングされてる、みたいに思ったんじゃないか
なんか勉強の順番おかしいんじゃない?
もっと前のフェーズでの学習が抜け落ちたまま次進んでる気がする
2017/07/08(土) 00:09:10.26ID:pa5RQPEd0
>>145
いやいや、いきなりアセンブラは無いだろとw
2017/07/08(土) 00:11:00.51ID:lNWyFXj50
>>146
俺もそう感じた
ただ学習の本やサイトも「おまじない」とかアホなことぬかすからわけがわからなくなるんだと思う
2017/07/08(土) 01:17:01.28ID:5hrqvRHFd
俺何年もVBAつかってるけどオプションイクスプリシットとか読めないわ書けるけど
ただのおまじないだしないいよな別に
150デフォルトの名無しさん (ワッチョイ 97ea-okny)
垢版 |
2017/07/08(土) 04:13:51.39ID:4CWa99QQ0
Private Sub Worksheet_Calculate()


If Worksheets("sheet1").Cells(3, 20) > 4000 Then

Worksheets("sheet1").Range("V4:AP4").Insert

End If


end sub

インサートがめっちゃ繰り返される。どうして?
2017/07/08(土) 08:57:15.58ID:YOB7IyKs0
>>150
ifが永遠にtrueになるからではないか
セル挿入→再計算→ifがtrue→セル挿入→再計算→ifが(略
Worksheets("sheet1").Cells(3, 20) がいつ4000以上になるのか
本当になるのかチェック
2017/07/08(土) 09:26:58.00ID:lNWyFXj50
>>150
Application.EnableEvents = False
で、eventを止める
そうしないと
>セル挿入→再計算→Worksheet_Calculate→ifがtrue→セル挿入→再計算→Worksheet_Calculate→ifが(略
が起こる

Private Sub Worksheet_Calculate()
Application.EnableEvents = False
If Worksheets("sheet1").Cells(3, 20) > 4000 Then
Worksheets("sheet1").Range("V4:AP4").Insert
endif
Application.EnableEvents = True
End Sub
153デフォルトの名無しさん (ワッチョイ 97ea-okny)
垢版 |
2017/07/08(土) 13:34:02.80ID:4CWa99QQ0
>>151,>>152
的確な指示ありがとう!!(笑)
すごいなここの人は
154デフォルトの名無しさん (ワッチョイ b7e3-jTKI)
垢版 |
2017/07/08(土) 16:53:25.86ID:Z/1cPHhj0
>>149
別にいいよ、モジュールの一番上にそれを書くのを忘れなければ
2017/07/08(土) 17:53:16.70ID:lfjWBFMWd
モジュールの一番上に書くのは153でしょ

'2ちゃんねるの神様に教えてもらったコードです
'神様ありがとうございます
Option Explicit
Sub foo()
156デフォルトの名無しさん (ワッチョイ ffb9-wcci)
垢版 |
2017/07/09(日) 00:06:53.03ID:8a4WwF270
こんばんは。
困ってます。

先日作成したマクロが動かなくなりました。
作成した日は動きました。
(特定のフォルダをコピーしてリネームするだけの動きです。)
プログラムを手動で実行したときは問題なく動くので、
プログラムの問題ではなさそうなのですが。

エクセルのセキュリティは、「警告を表示してすべてのマクロを無効にする」
にしています。
エクセルの再起動・PC再起動は試しましたが、だめでした。

C:\...Local\Temp\Excel8.0のMSForms.exdも消してみたりしましたがダメでした。

原因は何でしょうか・・・?
157デフォルトの名無しさん (ワッチョイ ffb9-wcci)
垢版 |
2017/07/09(日) 00:08:43.90ID:8a4WwF270
スペック全然書いてなかった。

Windows8.1
Excel2013 です。
158デフォルトの名無しさん (ワッチョイ ffb9-wcci)
垢版 |
2017/07/09(日) 00:14:34.37ID:8a4WwF270
すみません。
書き込んですぐに自己解決しました。

コマンドボタンのオブジェクト名が違ってた・・・。
2017/07/09(日) 03:04:28.53ID:EKrowZUC0
>>158
良いんだけどさ、最低限デバッグ出来るようになってくれ。
2017/07/09(日) 10:34:39.10ID:ouwdb2hLM
まあ、解決したことを書いてくれたのはよかった
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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