Excel VBA 質問スレ Part62

■ このスレッドは過去ログ倉庫に格納されています
1
垢版 |
2019/06/24(月) 00:21:37.48
!extend:checked:vvvvv:1000:512

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

※前スレ
Excel VBA 質問スレ Part61
http://mevius.5ch.net/test/read.cgi/tech/1556203263/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/07/18(木) 17:21:20.08ID:pDSkjMbHd
Worksheet_SelectionChangeイベントを使って選択されたセルがColumns(20)を超えて選択された場合に選択を19までに戻したいんですけどコードを教えて下さい。
2019/07/18(木) 17:29:18.97ID:iWlQ47rb0
application.enableEvents = false
if selection.column > 20 then
selection.resize(selection.row,19).select
end if
application.enableEvents = true
398デフォルトの名無しさん (ワッチョイ fff7-ShKg)
垢版 |
2019/07/18(木) 17:33:44.07ID:iWlQ47rb0
まちがえた
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

With Selection
If .Columns.Count >= 20 Then
Excel.Application.EnableEvents = False
.Resize(.Rows.Count, 19).Select
Excel.Application.EnableEvents = True
End If
End With

End Sub
2019/07/18(木) 17:44:11.00ID:iWlQ47rb0
enableEvents操作いらんかったわ
2019/07/18(木) 17:48:00.14ID:pDSkjMbHd
>>398
早い返信ありがとうございます。
コードありがとうございます。

これって例えば選択したセルが30から60と選択された場合ってエラーですか?
2019/07/18(木) 18:52:19.99ID:iWlQ47rb0
いや、
30〜60列目までの範囲が選択されたら
30〜48列目が選択された状態に変える
要望内容を捕らえ違えたかな?
402デフォルトの名無しさん (ワッチョイ fff7-ShKg)
垢版 |
2019/07/18(木) 20:19:45.62ID:iWlQ47rb0
もし19列目(T列)移行を選択しないようにするって意味なら以下
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ActCel As Excel.Range
Set ActCel = ActiveCell
With ActCel
If .Column >= 20 Then
Set ActCel = Cells(.Row, 19)
End If
End With
Dim cngRng As Excel.Range
With Target
If .Column > 20 Then
Set cngRng = Range(Cells(.Row, 19), Cells(.Row + .Rows.Count - 1, 19))
ElseIf .Column + .Columns.Count > 20 Then
Set cngRng = Range(Cells(.Row, .Column), Cells(.Row + .Rows.Count - 1, 19))
End If
End With
Excel.Application.ScreenUpdating = False
Excel.Application.EnableEvents = False
If Not cngRng Is Nothing Then
cngRng.Select
ActCel.Activate
End If
Excel.Application.EnableEvents = True
Excel.Application.ScreenUpdating = True
End Sub
403デフォルトの名無しさん (ワッチョイ 4f91-9KOF)
垢版 |
2019/07/18(木) 21:09:01.60ID:Vm+OSKMy0
’こんな感じじゃなくて?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim rng As Range
  Set rng = Intersect(Columns("A:T"), Target) '20まで
  If Not rng Is Nothing Then
    rng.Select
  Else
    Cells(1, 1).Select 'エラー時A1を選択
  End If

End Sub
2019/07/19(金) 22:28:50.87ID:/2THaakJ0
行が削除された。行が挿入されたを認識したいんですがなんか方法ありませんか?
2019/07/19(金) 22:43:18.81ID:TvxEimVQ0
>>404
別シートから認識したいシートを参照しておき、参照先が変わったら認識とか
めんどくさすぎるか
2019/07/20(土) 02:29:28.36ID:mZk+4Ek40
>>404
WithEventsの変数2つ作って行削除行挿入のコントロールを入れておいてclickイベントで弄る
407デフォルトの名無しさん (ワッチョイ 3f8a-8mHW)
垢版 |
2019/07/20(土) 05:25:11.57ID:TdLuYGU30
どんな状況で使うんだそれwww
勝手に削除するやつがいるのか?
2019/07/20(土) 06:34:43.57ID:dpChKN8u0
おるぞ・・・
2019/07/20(土) 07:37:09.15ID:vf/4Yo8ld
Worksheet_Changeイベント内で

if Target.Columns.Count=Columns.Count Then

の中に、コピーされた時を想定してデータを貼り付けた時に特定のセルを消してます。

このイベントは行削除も行挿入もif中に入ってくるので、その2つの場合は除きたいんですけど、無理ですかね?
2019/07/20(土) 09:00:22.03ID:FGTvlN9C0
素直にシート保護するんじゃダメなの?
2019/07/20(土) 13:12:04.73ID:M28zss090
>>409
その条件を別の方法に変えたら?
貼り付けのイベントを拾うとか。
2019/07/20(土) 14:06:46.24ID:yIzn2tUG0
>>404
でけたっぽいが、あらゆる使用状況でテストしたわけではないよ

Dim Sel As Range

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 Set Sel = Target
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo GoErr
 If Target.Row = Sel.Row Then
  Debug.Print "変更"
 Else
  Debug.Print "挿入"
 End If
 Exit Sub
GoErr:
 Debug.Print "削除"
End Sub
2019/07/20(土) 14:13:01.97ID:yIzn2tUG0
別途配列にも代入しとけば、削除に反応してSQLのDELETE文の発行にも使えるね
そんなことやったような記憶
あんまりお洒落なことすると、ハマる恐れもあるが
2019/07/21(日) 01:34:22.11ID:jI92lOqS0
挿入ってなんかエロいな
2019/07/21(日) 08:59:00.32ID:8zHzQ0Ul0
じゃあ insertと言い直せ
2019/07/21(日) 09:15:07.24ID:tbU/thR+0
oh,yes
2019/07/21(日) 11:12:02.68ID:4aIgjVvla
「VBA StringBuilder」とかでググって出てくるコードの例(具体的にはhttps://qiita.com/e-katayama/items/8a114357b0df91cfbdbbなど)をベースに、特定の変換をかけた文字列を高速に連結する方法を考えてるんだが、
Midステートメントを使った置換そのものは早いんだが、クラス化すると処理全体としては&演算子を使った連結の方がなぜか早くなる。
可能な限り文字列型への代入は避けてるし、引数もByRefにしてるんだが、イマイチ原因がピンとこない。
StrPtrでm_bufferのポインタを確認すると、クラス内から見ればポインタはずっと同じだが、
呼び出してる外部モジュール側から確認すると、AppendやToStringとかのメソッドを呼び出す度に2つのアドレスを行き来してる。
これは自分のやり方が悪いんだろうか?
2019/07/21(日) 11:14:15.04ID:tbU/thR+0
コード晒してくれればボトルネックになってるとこを見つけれるかも
今日暇だからやってみるぞ
2019/07/21(日) 11:41:51.53ID:wqzeAX+60
>>413
配列に対してDelete出来るの?

>>417
どうやってるのか知らんけど、
ループ内でProperty Get使ったら、物凄く遅くなって、
やっぱ俺2次元配列でいいわwwwwってなったことはある。
2019/07/21(日) 12:13:56.99ID:yJjnZgJg0
>>419
まあ、自分の書いたコードなんて単なる設定
利用したルーチンがほぼほぼお仕事する
何を使うかで1万倍ぐらい違うこともあるだろ(笑)
2019/07/21(日) 12:18:26.68ID:yJjnZgJg0
あと、画面更新の負荷はものすごい大きいよな
2019/07/21(日) 12:44:29.43ID:/atv33Bt0
>>419
> 配列に対してDelete出来るの?
配列と比較してシート側の削除を検出するってことじゃないかな
2019/07/21(日) 13:53:33.71ID:jI92lOqS0
デリケートにやるんだ
2019/07/21(日) 14:18:30.41ID:4aIgjVvla
>>418
ありがたいが、今ぱっと出せるのがクラス部分ぐらいしかない・・・
(StringBuilder.cls)Option Explicit
Private sBuf As String
Private iBuf As Long
Public Sub Initialize(ByRef tSize As Long)
  sBuf = String$(tSize, vbNullChar)
  iBuf = 0
End Sub
Public Sub Append(ByRef sValue As String)
  If iBuf + Len(sValue) > Len(sBuf) Then sBuf = sBuf & String$(Len(sBuf) * 2 + Len(sValue), vbNullChar)
  Mid(sBuf, iBuf + 1) = sValue
  iBuf = iBuf + Len(sValue)
End Sub
Public Function ToString() As String
  ToString = Left$(sBuf, iBuf)
End Function
https://excel-ubara.com/excelvba4/EXCEL271.html
のに少し手を加えただけなんだが(class_initializeでなく、呼び出し側が必ずinitializeを呼び出してサイズを決めるようにした)。
呼び出し側のコードが今手元になくて夜中までちょっと無理なんだが、やってる中身は、
Set objStringBuilder=New StringBuilder
Call objStringBuilder.Initialize(CONST_SIZE)
For i=1 To Len(srcStr)
Call objStringBuilder.Append(convertFunction(Mid$(srcStr,i,1)))
Next i
Let MainFunction=objStringBuilder.ToString
みたいな感じ。実際はもうちょい複雑だが、&使う方はここが
For i=1 To Len(srcStr)
Let MainFunction=MainFunction&convertFunction(Mid$(srcStr,i,1))
Next i
になってる、ぐらいなもん。
やっぱ、文字列型変数の評価回数が多いせいなんだろうか?
2019/07/21(日) 14:22:28.88ID:4aIgjVvla
行数制限でギュウギュウになってしまった。ごめん。
あと呼び出し側もOption Explicitつけてるので。一応。
2019/07/21(日) 16:35:43.80ID:YTBWsrAX0
>>422
そゆこと
説明不足だった
SQLの発行というのは、SQL Server等の外部DBに対して
427デフォルトの名無しさん (ワッチョイ 8f8e-DngZ)
垢版 |
2019/07/21(日) 16:44:43.49ID:zVh3KjUp0
全角文字で書くような馬鹿の後出し言い訳か
2019/07/21(日) 17:18:46.36ID:YTBWsrAX0
なぜかちょうど今やってることと2連続で関係してる
DB編集画面は結局フラグ式にしたけど
自分用なので、ユーザーフレンドリーより処理の単純さと自分的な分かりやすさを取った

文字列連結も改めて整理しようとしてたところ
Midは固定なら速いが、可変だと遅い
■100文字を10万回連結
・固定: 1000万字確保: 0.08秒
・固定: 5億字確保: 2.5秒 (20億字はSpace関数が駄目だった)
・可変: 2万字ずつ拡張: 3.3秒
1000万字だって十分あり得ないし、なんなら2万字でも、実際に拡張する場面はないとは思う

でも心理的にわだかまりが残る
可変の配列は0.3秒だった (ReDim Preserveで後ろへ後ろへ追加、最後にJoin)
ほどほどの固定の超速を取るか、可変の高速を取るか
これも逆に、あり得ない規模でも0.3秒、困る場面はあり得ない
2019/07/21(日) 17:23:37.68ID:YTBWsrAX0
い、言い訳?逆に配列をSQLで操作する方法を知らん
2019/07/21(日) 17:51:10.98ID:tbU/thR+0
>>424
cで言うint left() と string left()を比較してみた
left$()の方が早い、これは予想外だったな

Sub foo()

Debug.Print "str: " & Time()
a = Time()
For i = 1 To 10000000
ToString = Left$("aaaaaaaaab", 1)
Next
Debug.Print "str: " & a - Time()

Debug.Print "int?: " & Time()
a = Time()
For i = 1 To 10000000
ToString = Left("aaaaaaaaab", 1)
Next
Debug.Print "int?: " & a - Time()

End Sub

後は文字列評価だけど、どこが必要でどこが不要かは分からないので何とも言えない
全体見ればどこで最適化したいか分かるかもしれない。後はどれぐらい減らしたいか
一日一回のマクロを10秒→1秒に減らしたいってなら寝る
2019/07/21(日) 19:07:22.36ID:wqzeAX+60
>>422
>>429
やっぱそっちか。
配列にDelete出来たら便利だろうと思ったんだけど。
2019/07/21(日) 21:44:27.38ID:wqzeAX+60
PDFに、AddNewAnnotでテキスト注釈を追加しようとしても、
ポップアップ注釈になっちゃう。
何でだろう?

第2引数には"Text"を指定していて、
Debug.PrintでGetSubtypeを確認しても、間違いなく"Text"と表示されてるのに。
2019/07/21(日) 23:48:26.23ID:wqzeAX+60
↑自己解決

× "Text"
○ "FreeText"

こうだった。
2019/07/22(月) 00:41:41.83ID:sdD1SeGB0
100個くらいのxlsxデータを1つ1つ開かずにセル値を配列に格納させたいんだけど
できるだけ速く処理させるにはどんな方法がありますか?
データベース形式のファイルでないのでADO接続は諦めました。
2019/07/22(月) 00:56:28.70ID:zv/NMHHfx
ExecuteExcel4Macro("'[任意のファイルのフルパス]'シート名!R1C1形式のセルアドレス")で、ファイルを開かなくても読める
2019/07/22(月) 00:57:17.91ID:zv/NMHHfx
処理速度が速いかどうかは分からないけど
2019/07/22(月) 01:02:00.91ID:odzqFd9J0
>>434
優秀な後輩にやらせる
2019/07/22(月) 06:18:13.29ID:GAEqWBnq0
>>428
言語による、処理系の速度の比較

C/C++ のnative・マシン語系 : 100
Java, C# などのコンパイル・中間言語系 : 10
JavaScript, Python, Ruby などの動的言語系: 1

なお、JIT は、フィボナッチ数列・素数などの計算では速いが、普通のプログラミングでは無意味

遅い理由は、I/O, 動的配列(動的コンテナ)などでメモリを動的に確保する、
動的にアドレス計算するなど
2019/07/22(月) 09:27:20.13ID:rxI3cfFL0
Excel VBA の速度は Cの100に対してどれぐらい?
2019/07/22(月) 10:08:13.43ID:DAYqWJvs0
VBAは中間言語方式だけど、内部構造の違いからC#より遅くてJavaよりは速い
441デフォルトの名無しさん (ワッチョイ ff68-ShKg)
垢版 |
2019/07/22(月) 19:19:01.79ID:MenVMjW60
Excel VBAはExcelの評価が入るとすげー遅くなるけど、
EXCELの評価ナシならそこまで遅くない
ただ、vbaで速さを求めるのはナンセンスだと思う
2019/07/22(月) 19:20:20.47ID:x75J2JMa0
>>434
ExecuteExcel4Macroで開かずに読めるが、いちいち開いて読むより速いだけで速いわけではない
2019/07/22(月) 22:17:37.77ID:SAttBB2w0
>>434
そもそもxlsxがzipだからなあ。
読み込みより解凍の方が長いんじゃないかと思うくらい。
444デフォルトの名無しさん (スププ Sd5f-x7W1)
垢版 |
2019/07/22(月) 23:58:25.16ID:ZZbz3w4Ud
>>434
定期的にインデックス化するのは他言語なら常識
2019/07/23(火) 05:29:57.32ID:LmcM+lna0
意外と記憶にないコレクションからの連結
追加時にサイズを記録しといて、最後にぴったりサイズでメモリ確保してMid

(クラス想定)
Public Item As New Collection, Length As Long

Sub Add(Text As String)
 Item.Add Text
 Length = Length + Len(Text)
End Sub

Function Text() As String
 Dim Pos As Long, Var As Variant

 Text = Space(Length)
 Pos = 1
 For Each Var In Item
  Mid(Text, Pos) = Var
  Pos = Pos + Len(Var)
 Next
End Function

配列のJoinは実装のシンプルさがいいんだけど、100字+10万回で0.3秒
こっちは0.15秒という倍の速さで、そこそこシンプル、可変
普通と言えば普通な発想だけど力業のイメージがあって、やってみようと思わなかったのかも

ちなみにFor Eachを番号方式にすると、80秒ぐらいかかってびっくりした
そんな違うんだね
2019/07/23(火) 06:30:29.98ID:LmcM+lna0
>>441
Excelの強みはむしろシートだと思う
ただしデータ処理用ではなく、表示・操作用のグリッドコントロールとして
VSにこんな高速高機能なグリッドコントロールはない、はず(知る限り)

特に CopyFromRecordset の異様な速さ
大量に表示した状態での動きも速い
DBの表示媒体として実は最強だと思う
(他の言語からExcelを呼び出してもいいので、VBA限定ではないけど)
2019/07/23(火) 12:43:05.74ID:Wmp6rbs0M
セルA1からはじまる、5万行30列あるディレクトリツリーを、グループ化したいんですが、
最初のA列のみはエクセルのグループ化でうまくいくけど、B列以降がうまく行きません。
VBAでいっぱつで処理できる方法ってありますか。
448デフォルトの名無しさん (スッップ Sd5f-k2pK)
垢版 |
2019/07/23(火) 13:58:45.14ID:6EIv8bzUd
>>446
何か勘違いしてない?
エクセルが速いなんて全くないんだけど
2019/07/23(火) 14:14:05.21ID:+7TCISw60
>>446
sed や tail などでいい
30GBのテキストも0.04秒で tail できたし
編集も sed は問題なかった

行数上限がない理想的なExcelが将来でても
そういう大きいDBはしんどいんじゃないかな?
2019/07/23(火) 16:29:02.63ID:wjsoV9EZM
つうか普通に10万レコード辺り越えたら遅いだろ
DBを舐めすぎ
451デフォルトの名無しさん (スッップ Sd5f-k2pK)
垢版 |
2019/07/23(火) 16:49:12.46ID:6EIv8bzUd
つうかDBは同時接続数が多くなるほど威力を発揮する
単一接続のエクセルと比較するのがどうかと思う
2019/07/23(火) 18:25:17.72ID:W2R1kWYLd
質問です。

長さAに対して等間隔の点のピッチを計算したい。欲しい答えはピッチ長さ、両端の数字。

条件
両端は同一数値で30以上50以下。ピッチは190以上220以下。
共に50と220の整数に近い数値。

結果
長さ  1200
ピッチ 220☓5
両端  50

こういった計算って結構面倒くさいですか?
関数電卓で計算する分には出来ますがVBAだと全く思いつきません。
宜しくお願いします。
2019/07/23(火) 19:05:35.16ID:de2cQTfB0
>>452
Aの長さによっては絶対に答えが出ない場合があるけど、その時はどうすんの?
2019/07/23(火) 19:07:08.73ID:de2cQTfB0
>>452
Aの長さによっては、答えが2種類出る場合があるけど、その時はどうするの?
2019/07/23(火) 19:23:21.87ID:ToxLFwwH0
>>447
うまく行かないとはどういう状況?

>>452
電卓でもVBAでも他の言語でも考え方は同じ
456デフォルトの名無しさん (ワッチョイ 8f8e-DngZ)
垢版 |
2019/07/23(火) 19:57:04.84ID:vEtQ8tFE0
>>452
馬鹿は死ねや
2019/07/23(火) 19:58:57.06ID:zqVgh/rh0
はい
2019/07/23(火) 20:14:58.52ID:vYgPd/B2M
>>455
同じ文字列なら重複分を消してセルは残して最後にグループ化という感じのをやりたかったのですが、
結局ピポッドでそれっぽいの作成して上司にぶん投げたらOK出ました。
2019/07/23(火) 23:18:29.89ID:M6EwQBh2d
>>453
>>454
Aの値は整数または小数点第1位まで。
優先は
ピッチが整数
答えが出ない場合はエラーメッセージ。
2019/07/24(水) 12:08:14.05ID:/HKiGEdd0
Prelude> let collectPitch = [(t,p,n)| t<-[30..50],p<-[190..220],n<-[1..10], 2*t+n*p==1200]
Prelude> collectPitch
[(30,190,6),(50,220,5)]
Prelude> last collectPitch
(50,220,5)

Prelude> 218*2+50*2
536
Prelude> 220*2+48*2
536

つまり長さが536 の時に (pitch,truncate)=((218,50),(220,48))の
どちらが欲しいのかわからないな
2019/07/24(水) 12:12:04.48ID:Ei3DGN3ud
>>460
ありがとうございます。

220に近い方が欲しいです。
2019/07/24(水) 16:52:46.32ID:8dT07gCiM
>>461
仕様をはっきりさせないから答えが分からない
単純に220から190まで回して両端が指定以内で良いだろ
2019/07/24(水) 17:22:10.81ID:l/M93qCQ0
勤務表の作成目的での使用は可能でしょうか。
50人の職員で勤務時間帯が7種類あり、休み希望や特定の勤務帯の希望があれば絶対にその希望にしなくてはならない。希望を入れたらあとは乱数で勤務表が出来るなんて事は可能ですか?
2019/07/24(水) 17:32:21.73ID:mE96IG5M0
可能。
勤務が集中したりして不満がでたり、法令違反になるような勤務表になる場合もあるが。
当然解無しもある。
2019/07/24(水) 17:46:30.09ID:8dT07gCiM
>>463
そういういい加減な仕様で作っても意味ないだろ
後は乱数・・・でいい訳ないやん
2019/07/24(水) 17:48:18.02ID:leU1oAAPM
>>463
そういうSaaSいくらでもあるから契約しなさい
貴方がゴミを自作するコストよりよほど安上がりです
2019/07/24(水) 17:52:45.82ID:MYVnxp7u0
>>449
「DB」というのは、SQL Server等のDBサーバのこと
Excelを「DB」という言い方したことはないよw

そのDBサーバの内容を動的に転写して、
編集画面として使う場合、Excelが最速ってこと

編集画面なので、元データが100万行あっても、表示するのは人間が作業できる数十行や数百行
根性のある事務員がいると、千行ぐらい一気に扱えるよう要求される場合もある
千行ぐらい行くと、一般のグリッドコントロールでは動作が重くなるが、Excelはすぱっと動く、という話
2019/07/24(水) 17:57:45.46ID:MYVnxp7u0
>>448
>>450
>ただしデータ処理用ではなく、表示・操作用のグリッドコントロールとして>>446
2019/07/24(水) 18:23:13.93ID:WV2r95Zsx
半角先生を彷彿とさせる奇文
本人かもしれんな
2019/07/24(水) 21:41:29.06ID:/T35oaZK0
ユーザーフォーム内にwindows explorerを埋め込む事は可能でしょうか?
windows explorerを個別に動作させたいです
2019/07/24(水) 21:48:43.51ID:nvQWEisZ0
>>470
埋め込むことと個別に動作させることは矛盾してない?
2019/07/24(水) 23:53:52.50ID:/T35oaZK0
>>471
ユーザーフォーム内に複数のexplorerを埋め込んで、それぞれを独立して動かしたいです。
例えば、explorer1、2、3があるとしてexplorer1でディレクトリ遷移したらexplorer2や3はexplorer1に追従しないようにしたいです。
2019/07/24(水) 23:56:23.15ID:/T35oaZK0
>>472
ユーザーフォーム内にexplorer1、2、3がある想定です
2019/07/25(木) 00:09:45.00ID:OfNmjxeUa
>>465
可能は可能なのか。
ありがとうございます。
年数別に分けてどの日も平均年数になるようにする事も可能ということですよね。
2019/07/25(木) 00:16:40.13ID:D8pzUtDE0
>>474
どのプログラムも厄介なのは外界とのやり取り
本当にどんな乱数ひいても仕事は回るの?
476デフォルトの名無しさん (アメ MMc7-HdTi)
垢版 |
2019/07/25(木) 00:33:27.67ID:5qtaCE1dM
>>474
あなたは必要な用件が例えば20有るところ今2つしか言えてない
各自への負荷分散や希望労働時間も考慮すると乱数なんて使わない
仕事分かってない奴は仕様も作れない
2019/07/25(木) 00:35:58.87ID:o8Dlhs3E0
>>472
エクスプローラー3つ起動してWinAPIでウィンドウサイズと位置を常にユーザーフォーム内にあるようにする
しか思いつきませんでした
2019/07/25(木) 00:42:50.48ID:Gl1cJZMi0
作り始めてみないと作れるかどうかなんか分からない
作ってみりゃいい
ダメなら使わなければいいだけ
そうやって上達していく
2019/07/25(木) 01:12:01.57ID:5qtaCE1dM
適当に作って上達って・・
ちゃんと考えなくっちゃ上達なんてない
2019/07/25(木) 02:17:55.08ID:j99gzyNC0
質問です。
セルB2の時間から4時間5秒後の時間をセルC2に記載したいときどのようにコードを書けばいいでしょうか?
セルB2が文字や数字だとC2は""でB2が時間のときだけC2に4時間5秒足したいです。
時間を足すだけなら
range("c2").value = DateAdd("s", 14405 , range("b2")
)と書けばいいのは解るんですが、分岐処理が上手くかけません。
2019/07/25(木) 03:57:32.39ID:04HWMie30
時間の表示形式は?統一されてるの?
482デフォルトの名無しさん (ワッチョイ 068c-0v1+)
垢版 |
2019/07/25(木) 03:58:38.58ID:lnZalLM00
VBA使わずに関数だけでやっちゃだめなの?
2019/07/25(木) 05:26:07.94ID:dATWdLko0
>>463
乱数は偏っているから、使ってはいけない!

例えば、50人の場合、
5人は10回選ばれて、別の5人は0回など、極端になるから
2019/07/25(木) 07:08:49.98ID:AYG483l20
>>480
IsDate でいいんじゃね
2019/07/25(木) 07:54:16.98ID:5qtaCE1dM
VBAはセルの追加削除に追随出来ないから関数で十分なものは関数を使うべき
2019/07/25(木) 11:30:00.12ID:nCaXNWq80
>>476
まあ、必要要件をまとめられないのは、何が必要かもわからないからだよな
それを知るためにも、>>466さんの言っているように専門家と契約するのが
一番コストが低く済むな
自分で作る、このスレで質問するなんて要件難しくて無理だから
2019/07/25(木) 11:52:40.21ID:5L4KGe8+M
なんでお前らが他人の業務心配してんの
回答は
VBAで出来ますよ
で終わりだろ
2019/07/25(木) 12:05:41.30ID:nCaXNWq80
>>487
でも、お前Excelもろくに使えないだろ(笑)
VBA使う意味ないんだよ
2019/07/25(木) 13:27:15.91ID:nCaXNWq80
>>462
もう少しわかりやすく書いてやれよ
数値ピッチを宣言して
ピッチでMaxからMiniまでStep-1で回して
長さとピッチのモッドが60-100に収まればOK
そのピッチの値、ただこれだけ
2019/07/25(木) 13:34:02.88ID:nCaXNWq80
あ、エラーはピッチがMiniより小さかったらエラーだな(笑)
2019/07/25(木) 14:30:07.15ID:a7DwyeCF0
>>477
普通はWebブラウザコントロール使うと思うんだが。
完全に一緒じゃないけど、よっぽど現実的。
2019/07/26(金) 10:59:45.98ID:nW8IFIW60
ExcelVBAのユーザーフォーム上で、PDFを表示、操作をしたいです。
ですが、ユーザーフォームにコントロールを追加しようとすると、
「要素が見つかりません」とダイアログが表示され出来ません。
どなたか解決策をご存じの方がいましたら、教えていただけますでしょうか。。

Acrobat pro DCはインストールしてあり、ExcelはOffice365を最新の状態で使用してます。
2019/07/26(金) 19:39:04.29ID:Mlm4oTrf0
>>492
コントロールってどれ?
2019/07/27(土) 08:56:54.14ID:4Tko0dWk0
バーコードたくさん作って印刷するプログラム作ってるんだけど
一筋縄ではいかないな
いろいろエラーが出て大変だわ
しかもステップインしながら様子みようとすると
中断モードでは入力できません
とやらのエラーがでる
回避する方法はあるようだけどめんどくさそうだ
2019/07/27(土) 08:59:35.78ID:T1jDYlFV0
>>494
バーコードってバーコードフォントがあるから楽勝だよ
気をつけるのは頭の0が消えないように文字列にするぐらい
2019/07/27(土) 09:07:12.15ID:4Tko0dWk0
>>495
それって外部からフォント導入しないといけないやつですよね?
会社のPCでやってるんでだめなんですよね
今はこれ↓を参照して使ってます
Microsoft Access BarCode Control 14.0
重いしエラー出やすいし別の方法があればいいんですけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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