Excel VBA 質問スレ Part39 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/11/27(金) 20:36:45.35ID:9HV+ag/s___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ
!、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/
ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/
 ̄  ̄ ̄
このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。
コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。
※前スレ
Excel VBA 質問スレ Part38 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1441619979/
0488デフォルトの名無しさん
2016/01/20(水) 00:41:59.97ID:uYf8rD9kつまりモジュールレベルの変数は明示的にNothing代入するなりRedimするなりしないと開放されない気がする
0489デフォルトの名無しさん
2016/01/20(水) 01:20:01.65ID:7T123+WAもう一つ別に、Excelプロセスを起動したら?
0490デフォルトの名無しさん
2016/01/20(水) 02:06:12.29ID:3JHsYJhz配列マジックを極める(ASCII)
って本をアマゾンでジャケ買いしたんだけど
VBAのことほとんど触れてねー
VBAでいうところの配列のテクニックを期待してたんだが残念。
やっぱ本はジャケ買いするもんじゃないな
0491デフォルトの名無しさん
2016/01/20(水) 03:44:21.39ID:gC8iY3QIループ処理にDoEvents入れればループ処理宙は実行中に他の作業が出来る。
0492デフォルトの名無しさん
2016/01/20(水) 07:11:18.99ID:xfIx1JoDそんな本があるのか。
息するように配列を弄りまくっている俺でも、VBAの配列にはよくわからないところがある。
0493デフォルトの名無しさん
2016/01/20(水) 08:21:54.61ID:biOEENiSサブルーチンの中で定義したいと言う話
ファイル単位のスコープならモジュールでもできる
0494デフォルトの名無しさん
2016/01/20(水) 10:03:37.62ID:TOXNslUJ今気がついた。
普通にJavaScriptの構文で書いてた。最近VBAよりそっちの仕事のほうが多くて
ガチで気が付かなかった。
0495デフォルトの名無しさん
2016/01/20(水) 10:37:40.75ID:HskUHurd配列のarrayってVBAでいうジャグ配列(配列を要素とする配列)のことだろうか?
ByRefで関数に渡せるよ。
要素を参照で持てるか?という意味だとしたら、それはできない。
0496デフォルトの名無しさん
2016/01/20(水) 11:25:41.73ID:TOXNslUJなるほどねぇ。
JavaScriptやってると配列関係の取扱いがVBAとはちょっと違うので、混乱するね。
0497デフォルトの名無しさん
2016/01/20(水) 11:53:53.10ID:HskUHurdarray1
array2
array3
をまとめて、
array_all = Array(array1, array2, array3)
なんてものを作ると、全部コピーになってしまう。
参照にしたくて色々試したが成功しない。
どうやら不可能なようだ。
0498デフォルトの名無しさん
2016/01/20(水) 12:46:25.59ID:V5TARUOi度々ありがとうございます。
念のため、全てnothingで終わらせてみる実験をしてみます。長く走らせると不手際で解放されてないのかも知れません。
0499デフォルトの名無しさん
2016/01/20(水) 18:19:33.52ID:xdXYdVv+判定することはできるのでしょうか。
参照先のセルを得るのではなく、
「参照されているか、否か」を判定する方法です。
シート内の不要データの整理に使いたいと考えています。
0500デフォルトの名無しさん
2016/01/20(水) 18:34:15.12ID:XFqYG3t70501499
2016/01/20(水) 18:45:24.37ID:xdXYdVv+あわせて調べてみました。
ttp://excel.onushi.com/function/isref.htm
isref()の引数で判定対象のセルを指定すればいいのですかね。
isref(cells(i,j)) みたく。
0502デフォルトの名無しさん
2016/01/20(水) 19:48:55.16ID:XFqYG3t7参照できたかどうかの関数らしい
ので間違いだった
セルの内容が参照の場合trueって説明だったから
isref使った時点で参照してるじゃんってミスでもないらしい
考えるにデータの入っていないセルに参照されてるかどうかの
プロパティつけるのは無駄かもしれないので
アイディアがないと無理そう
0503デフォルトの名無しさん
2016/01/20(水) 20:55:20.57ID:uYf8rD9kRange.Dependents プロパティ
0504499
2016/01/20(水) 22:25:06.28ID:xdXYdVv+Dim returnValue As Range
returnValue = range1.Dependents
こんな感じでrange型変数に格納したあと、
if分で空(nothing)かを判定する、というのはどうなんでしょうか。
(自分で確認すれば良いのですが、ちょっと今は試せない状況で・・・)
ただ、どっちにしろ
>Dependents プロパティは作業中のシートでのみ有効で、
>リモート参照をトレースできないことに注意してください
ttps://msdn.microsoft.com/ja-jp/library/office/ff197707.aspx
なんて記述があるんで、
他シートをまたいでいるものに関しては
文字列判定をする必要がありそうですが。
0505デフォルトの名無しさん
2016/01/21(木) 00:52:36.55ID:rehOk3U9各列から1つずつ取って、それらを左から繋げた文字列(順列)を作りたいのですが、どのように書けば良いのでしょうか。
各列に何個要素があるかをカウントするところまでは書けたのですが、そこからよくわからなくなってしまいました
0506デフォルトの名無しさん
2016/01/21(木) 01:06:23.00ID:X7n9A0oTこんな感じか?
Sub macro1()
r = 1
For r1 = 1 To 5
For r2 = 1 To 8
For r3 = 1 To 5
s = Cells(r1, 1) & Cells(r2, 2) & Cells(r3, 3)
Cells(r, 6) = s
r = r + 1
Next
Next
Next
End Sub
0507デフォルトの名無しさん
2016/01/21(木) 01:07:45.84ID:0jk7vnPhFunction RefCheck(CheckRange As Range) As Boolean
If CheckRange Is Nothing Then Exit Function
RefCheck = True
For Each x In ThisWorkbook.Worksheets
For Each y In x.UsedRange
For Each Z In CheckRange
If y.Formula Like "*" & Z.Address(1, 1) & "*" _
Or y.Formula Like "*" & Z.Address(0, 1) & "*" _
Or y.Formula Like "*" & Z.Address(1, 0) & "*" _
Or y.Formula Like "*" & Z.Address(0, 0) & "*" _
Then Exit Function
Next
Next
Next
RefCheck = False
End Function
あとは調べて無いけど同一シート内で参照していた場合もブック名とシート名を表示させる事が出来れば、
Addressの第四引数にTrue入れてチェックする事で間違いなく判定出来る。
0508デフォルトの名無しさん
2016/01/21(木) 05:38:14.28ID:tGM9G3/Pありがとうございます
そういう感じで必要十分なのですが、余談ですが同じような処理を繰り返すのでもう少しうまく処理できるのでしょうか?
0509デフォルトの名無しさん
2016/01/21(木) 06:18:36.49ID:0jk7vnPhSub test()
Dim a(1 To 5), str(5), b() As String, index As Long
For i = 1 To 5
a(i) = Range(Cells(1, i), Cells(Rows.Count, i).End(xlUp)).Value
Next
For Each v1 In a(1): str(1) = v1
For Each v2 In a(2): str(2) = v2
For Each v3 In a(3): str(3) = v3
For Each v4 In a(4): str(4) = v4
For Each v5 In a(5): str(5) = v5
c = ""
For Each x In str
c = c & x
Next
ReDim Preserve b(index)
b(index) = c
index = index + 1
Next:Next:Next:Next:Next
For Each x In b
Debug.Print x
Next
End Sub
五桁固定。最低でも一桁当り2要素ないといけない。
桁数まで柔軟にすると、くっそ面倒だから自分でやれ。
0510デフォルトの名無しさん
2016/01/21(木) 07:56:21.86ID:hkWWdNPnだせぇ
0511デフォルトの名無しさん
2016/01/21(木) 08:30:12.04ID:epD6nfy/なぁ、出来もしないのなら、無理に回答しなくていいぞww
あとな、お前にお勧めのスレがある。
今までみた絶望的なソースコード [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1429279230/
0512デフォルトの名無しさん
2016/01/21(木) 08:48:35.32ID:Jdl8/hrxとても真似できん。
自分にない発想があるなって劣等感があるよ。
0513デフォルトの名無しさん
2016/01/21(木) 09:46:20.45ID:pkb4zgJk入出力2行、 桁数可変で本体処理2行。
右からやるか左からやるか...
0514デフォルトの名無しさん
2016/01/21(木) 10:15:19.09ID:f+IaIVwa0515デフォルトの名無しさん
2016/01/21(木) 12:00:32.16ID:tGM9G3/Pありがとうございます。
条件を書くと、以下のようです。
1)各列に何個の要素があるかは動的(
2)何列あるかも動的(>>506のネストの数は3だが、ここが何回ネストするかが動的になる)
3)組み合わせの仕方は左から順にのみで、並び替えの必要はない(樹形図的)
4)要素の文字数も動的で、何桁か決まってはいないし、数字もあれば文字列もある
私は条件2のうまい書き方がよくわからず、結局、何列あるかを調べて、if文で1列なら〜2列なら〜3列なら>>506というようにしています。
0516デフォルトの名無しさん
2016/01/21(木) 12:06:31.84ID:X7n9A0oTそういう場合は再帰を使え
0517デフォルトの名無しさん
2016/01/21(木) 12:13:08.74ID:pkb4zgJkかなり無理があるのでは?
組み合わせの数だから相当の量になる。
0518デフォルトの名無しさん
2016/01/21(木) 12:15:50.60ID:epD6nfy/つーか、そんなのユーザ定義関数でいいだろ。
0519デフォルトの名無しさん
2016/01/21(木) 12:54:35.53ID:jus49kmC組合せの数だけネストするわけじゃないだろ
0520デフォルトの名無しさん
2016/01/21(木) 13:30:20.23ID:X7n9A0oT再帰ってのはこんなふうに書くんだよ
ループのネストの段数が不定でも問題なく動く
VBAの仕様でデータが300列ぐらいあるとメモリ不足を起こすけど、300列の順列なんて出そうとしたら人類が滅亡するほど時間がかかるんで実用上は問題ない
Sub main()
Call Recursive(1, "")
End Sub
Sub Recursive(c As Long, s As String)
max_row = Cells(Rows.Count, c).End(xlUp).Row
If Cells(max_row, c).Value <> "" Then
For r = 1 To max_row
Call Recursive(c + 1, s & Cells(r, c))
Next
Else
Debug.Print s ' データ出力
End If
End Sub
0521デフォルトの名無しさん
2016/01/21(木) 13:36:58.95ID:P+RPuePi以下は、単純にマクロ記録したものです。
Sub Macro1()
Range("F5").Select
ActiveSheet.Range("テーブル2[#すべて]").RemoveDuplicates Columns:=Array(1, 6, 7), _
Header:=xlYes
End Sub
11列分テーブルの、1、6、7列目が重複したものを削除するのですが、
これに、8列目のの数値が小さいほうを削除、大きい方を残したいです。
わかりますでしょうか?よろしくお願いします。
0522デフォルトの名無しさん
2016/01/21(木) 15:34:42.41ID:epD6nfy/減価償却費の計算とかではよくつかってる。
0523デフォルトの名無しさん
2016/01/21(木) 20:02:04.58ID:RqTcmjez聞きたい事は分かったが残念な事に答えが分からんのだよw
0524デフォルトの名無しさん
2016/01/21(木) 20:35:34.37ID:0jk7vnPhSub test()
Dim c(2), m As Collection, del As Range
Do
Set del = Nothing
Set m = New Collection
xdata = Range(Cells(1, 1), Cells(Rows.Count, 11).End(xlUp)).Value
i = i + 1
If i > UBound(xdata, 1) Then Exit Do
c(0) = xdata(i, 1): c(1) = xdata(i, 6): c(2) = xdata(i, 7)
For j = 1 To UBound(xdata, 1)
If xdata(j, 1) = c(0) And xdata(j, 6) = c(1) And xdata(j, 7) Then m.Add j
Next
If m.Count Then
p = 0
For Each x In m
e = True
If p Then If xdata(p, 8) > xdata(x, 8) Then e = False
If e Then p = x
Next
For Each x In m
If x <> p Then If del Is Nothing Then Set del = Rows(x) Else Set del = Range(del, Cells(x, 1).EntireRow)
Next
If Not del Is Nothing Then del.Delete
End If
Loop
End Sub
これで動かないかな
0525デフォルトの名無しさん
2016/01/21(木) 20:40:55.77ID:xJzWoKjV28列目で降順に並び替える
3removeduplicate
41の列で並び替える
51の列を削除
0526499
2016/01/21(木) 23:00:34.27ID:0tyN2uzx下記は、セル(1,1)とそれを参照するセルを返して選択させる
ということをさせようとしています。
Sub Macro1()
Dim c As Range
Set c = Cells(1,1)
Set c = Union(c,Cells(1,1).Dpendents)
If Not c Is Nothing Then c.select
End sub
これだと、.Dependentsの対象(1,1))がどこかで参照されていれば問題ないのですが、
参照していないとエラーになってしまいます。
何か方法はないでしょうか。
0527デフォルトの名無しさん
2016/01/22(金) 00:36:15.19ID:gKLeKKXnSub Macro1()
Dim c As Range
Set c = Cells(1, 1)
On Error Resume Next
Set c = Union(c, Cells(1, 1).Dependents)
On Error GoTo 0
If Not c Is Nothing Then c.Select
End Sub
0528デフォルトの名無しさん
2016/01/22(金) 04:12:46.72ID:7u0WrXxg遅くなりました。ありがとうございます。忙しくてまだ試せていませんが、勉強します!
0529デフォルトの名無しさん
2016/01/22(金) 07:09:40.91ID:hQb40WO/何度もだせぇの書くなよ
質問者に悪いと思わんのかw
0530デフォルトの名無しさん
2016/01/22(金) 08:58:29.38ID:1YiOGDCqでもそれ、別に別の関数に投げるんでも全く問題ないわけだが。わざわざそういう
書き方した所で、大したメリットがない。
0531デフォルトの名無しさん
2016/01/22(金) 09:52:25.70ID:p0qaIBjS右からの畳み込みで表現するといいと思う。
0532デフォルトの名無しさん
2016/01/22(金) 11:27:13.63ID:aQA1bWN9遅くなってすいません。
思い通りに実行出来ました!ありがとうございました!
0533デフォルトの名無しさん
2016/01/22(金) 12:38:57.86ID:6pvUxBV3elseifを使うと、該当したら他のelseifコードはスルーしますが、1行書きifを使うと、一応ぜんぶ判定しにいくので。しかし可読性は1行書きの方なんですよね〜
0534デフォルトの名無しさん
2016/01/22(金) 13:04:43.89ID:1YiOGDCqselect文も使うのが普通ですよ。
0535デフォルトの名無しさん
2016/01/22(金) 13:27:56.38ID:KXk9pxmd100万回実行して、10ms未満の違いしかないようなことを気にしてもしかたがな。
0536デフォルトの名無しさん
2016/01/22(金) 14:29:53.04ID:p0qaIBjS複数の if が排他的でなかったら論理的に違うことをやってるのはわかるよね?
スピードなんかより
0537デフォルトの名無しさん
2016/01/22(金) 19:44:34.49ID:turD6O79'セルの値と該当しない場合、その行を削除するみたいなことをやりたいのですが、
'こんなことは可能でしょうか?
Sub test01()
Dim lRow As Long, i As Long
'mycollection = "田中","山田","佐藤","鈴木","井上"・・・・・・・手動でキーワードを入れる
lRow = Cells(Rows.Count, 1).End(xlUp).row
For i = lRow To 2 Step -1
If Cells(i, 2).Value <> mycollection Then
Range(i & ":" & i).Delete
End If
Next i
End Sub
0538デフォルトの名無しさん
2016/01/22(金) 20:00:51.94ID:ax/jel29ただそのキーワードというもののあり方によってはフィルタ系の機能を使ったり正規表現を使った方がいいかもしれないぞ
0539デフォルトの名無しさん
2016/01/22(金) 20:15:48.39ID:turD6O79Filter使ったことないですが挑戦してみます。
キーワードは、文字列で完全一致のもので絞り込めたらいいのですが、filterで問題ないでしょうか?
0540デフォルトの名無しさん
2016/01/22(金) 20:16:29.80ID:50X4sy+nvbaでやればあとはどうやってもできるんじゃないか
手動でキーワードを入れるってのをできるだけ
自動化するって問題だけだろ
0541デフォルトの名無しさん
2016/01/22(金) 20:40:19.73ID:KhXVHsnGより良いコード書いてからほざけ、ボケ
0542デフォルトの名無しさん
2016/01/22(金) 20:43:53.69ID:turD6O79mycollection(1000)として、filterをどのように使えばよいのでしょうか?
初心者ですいませんが、よろしければご教授お願いたします。
f = Filter(mycollection,.Cells(i,2).Value)
f(0)がエラーとなるならばといったようなコードでしょうか?
0543デフォルトの名無しさん
2016/01/22(金) 21:11:50.86ID:pRZKDnHiSub Test(Keyword As Range, CheckList As Range, CheckColumn As Long)
Dim del As Range
For i = CheckList.Row To CheckList.Rows.Count
For Each x In Keyword
If Cells(i, CheckColumn) Like x Then
If del Is Nothing Then
Set del = Cells(i, 1).EntireRow
Else
Set del = Range(del, Cells(i, 1).EntireRow)
End If
End If
Next
Next
del.Delete
End Sub
Keyword = キーワードを入れたセルを指定する。
CheckList = チェックしたいリストの範囲を入れる。
CheckColumn = キーワードを判定したい行を入れる。
0544デフォルトの名無しさん
2016/01/22(金) 21:15:29.86ID:p0qaIBjS0545デフォルトの名無しさん
2016/01/22(金) 21:18:48.91ID:d8M8QDrI「らんま1/2」みたいな演算子っぽいのが混ざった名前も変数にしたいんだけど何か方法ある?
0546デフォルトの名無しさん
2016/01/22(金) 21:44:34.68ID:50X4sy+nstrcollection=",佐藤,田中,長谷川,"
if instr( strcollection,"," & cells(n,1)) & ",")=0 then
cells(n,1).entirerow.delete
end if
0547デフォルトの名無しさん
2016/01/22(金) 22:34:02.46ID:d8M8QDrI0548デフォルトの名無しさん
2016/01/22(金) 22:35:11.31ID:d8M8QDrI全角を演算子と認識したりはしないよねさすがに
0549デフォルトの名無しさん
2016/01/22(金) 22:46:22.46ID:tiw7VxmHデータとしてはあり得るけど変数名にしたいってのは考えにくいが
たくさんあるなら var1div2 とかでいいかも知れん
0550デフォルトの名無しさん
2016/01/22(金) 23:24:56.91ID:d8M8QDrIVBAコードで漢字の変数名見ただけでアホだコイツと思うわけじゃん
ローマ字だか英語だかよくわからん変数名をこれからも使っていくわ一生
0551499
2016/01/22(金) 23:26:21.02ID:uYyrweLrありがとうございます。
なるほど、on errorステートメントというのがあるのですね。
同一シート内の参照はこれで問題ないのですが、
シートをまたいだ参照先を得ることは、当然できませんでした。
やはり不可能なのでしょうか。
dependents以外に何か方法がありましたら教えてください。
0552デフォルトの名無しさん
2016/01/22(金) 23:29:20.57ID:d8M8QDrI0553デフォルトの名無しさん
2016/01/22(金) 23:32:30.77ID:TWMQPGy9これいいね
0554デフォルトの名無しさん
2016/01/22(金) 23:38:00.02ID:r3UK0uLRそれやるならSplitで配列に変換した方が、その後の処理が簡単になりそう
0555デフォルトの名無しさん
2016/01/22(金) 23:54:33.37ID:ax/jel29今回問題なのはfilter(, , true, )のとき該当するものが無いと空の配列が返るってんで、それをどう数えたもんか?
ヘルプで言うと「配列に関するキーワード一覧」に書いてある(最近のバージョンでどういう目次構成か知らんけど)
UBound()で配列添字の最大値、LBound()で添字の最小値を取得できる、というのが使えるわけです
UBound()を使えばいいんだけど、ヘルプの該当ページにはどういうわけか
ここで知りたい空っぽのとき何が返るのかということと、Option Baseに言及していないという
VBA初見の人間を惑わすクソドキュメントになっている(もしかしたら最近のには書いてあるのかも)
そういうわけでどういうときどういう値が返るか試して、なんで-1なのか覚えてから使ってやってください
0556デフォルトの名無しさん
2016/01/23(土) 00:27:23.02ID:5faR9SkP今日は仕事が疲れすぎたので明日使わせて頂きます。
0557デフォルトの名無しさん
2016/01/23(土) 03:58:47.08ID:NKVsIEv5これは単純に見えて根深い問題で例えば FuncA、FuncBというBooleanの戻り値を持つメソッドがあったとして
If FuncA then
If FuncB Then
〜
End If
End If
を
If FuncA And FuncB then
〜
End If
とした場合これはあまり変わらないけど、もしFuncBで評価を求めるのに時間が掛かる場合、
Dim isDo As Boolean
isDo = True
If Not FancA Then
isDo = False
Else Not FancB Then
isDo = False
End If
If isDo then
〜
End if
とかにした方が速い時がある。つまり、FancAで既に評価対象から外れた場合、FancBの評価を見る必要はない。
.NetにはOrElseやAndAlsoという、片方の評価が既に条件を満たしていればもう片方の評価はしないという命令があるからそれを使うけど、
VBAのAndやOrはどちらも評価してしまうため、場合によっては使用しないで上記のような回りくどい書き方をした方が速い場合もある。
もちろん、この方法は評価を求める以外必ず実行しなければいけない処理がFancBに書かれていれば使うことは出来ない。
だから単純に決められることではないので、状況を良く見てからどう作るか考えた方が良いかもね。
0558デフォルトの名無しさん
2016/01/23(土) 04:07:52.25ID:NKVsIEv5だったら後はメソッドとか使う場合で片側の処理が重い時があるんで、それに気をつけておけばいいと思うよ。
0559デフォルトの名無しさん
2016/01/23(土) 04:31:04.25ID:JARUPMnaアメリカ人が発狂してたわw
0560デフォルトの名無しさん
2016/01/23(土) 07:00:23.52ID:FWUKBiDKなんか英語に合わせてるけど。
0561デフォルトの名無しさん
2016/01/23(土) 07:42:46.85ID:NVJ+LsdHエクセル上で業務マニュアルの作成をしております
セル内にタイトルを入力し、そこにハイパーリンクでそのタイトルの詳細のワードの保存先に飛ぶ形にしています
段々とタイトルも増えてきて、キーワードで検索をかけられるようにしたいと思って色々と調べていますが素人のため全く理解できない状態です
ユーザーフォームにテキストボックスを設けて、そこにキーワードを入力し、コマンドボタンで検索をかけたいですのですが、どのようにコードを入力したら宜しいでしょうか?
よろしくお願いします。
0562デフォルトの名無しさん
2016/01/23(土) 13:26:21.35ID:9iIZKcSa標準のフィルタ機能で十分だろ
0563デフォルトの名無しさん
2016/01/23(土) 14:42:09.66ID:YJo138Ig"エクセルでシートの参照先を調べたい"
でググってみると幸せになれるかも
0564デフォルトの名無しさん
2016/01/23(土) 15:40:45.44ID:xVQLFIqOListP()as Currency とGPR() as Stringという配列で、欲しいサンプルは、以下の5個です。
ListPが60以上の、サンプル数、SamSix
ListPが60以上かつ、GPRが4つの文字列である数、SB,SHB,SL,SHL
For n = 1 To 1000
If ListP(n, x) = Empty Then
Exit For
ElseIf ListP(n,x) >= 60 Then
SamSix = SamSix + 1
If GPR(n, x) = "B" Then
SB = SB + 1
ElseIf GPR(n, x) = "HB" Then
SHB = SHB + 1
ElseIf GPR(n, x) = "L" Then
SL = SL + 1
ElseIf GPR(n, x) = "HL" Then
SHL = SHL + 1
End If
End If
Next n
このループを多用(約1万回)しているのですが、ループを使用しなかったり、もっとスピードの出るアイデアはございませんでしょうか?
5個のサンプルを取得できれば満足です。
よろしくお願いいたします。
0565デフォルトの名無しさん
2016/01/23(土) 17:01:45.55ID:2O2OeDHJ本来だったら配列を昇順ソートしてからバイナリサーチやれば圧倒的に速くなるがね。
0566デフォルトの名無しさん
2016/01/23(土) 17:20:35.71ID:Ub1PC2hCCurrencyならEmptyチェックする必要ないんじゃない
後はそこだけで速くするのは難しそう
俺なら配列に値セット/変更する時に値チェックしてカウントするようにするかなぁ
案外配列じゃなくセルに展開して、カウントする数式入れたセル見た方が早いかもしれん
0567デフォルトの名無しさん
2016/01/23(土) 18:14:06.44ID:5/HkQk/m配列数式でできた
0568デフォルトの名無しさん
2016/01/23(土) 19:34:03.73ID:7fmpCrJtこの状態でどれぐらいの時間がかかってるのか教えろハゲ
0569デフォルトの名無しさん
2016/01/23(土) 19:41:11.42ID:UyBsumDJ調べてみましたが、やや難しそうです。(:;)
>>566
Emptyは必要ないですね//
配列をA列とB列にいったん貼り付けてワークシート関数で調べる方法ですよね。
ひとまず、やってみます!
>>567
使い方教えていただけますでしょうか?
SHL = WoksheetFunction.Countifs(Range( ),">60",Range( ) ,"HL")みたいな形で使えそうです。
0570デフォルトの名無しさん
2016/01/23(土) 19:45:35.16ID:G5thoHAj0571デフォルトの名無しさん
2016/01/23(土) 19:46:50.85ID:UyBsumDJ他のループも合わせてからの推測ですが50msぐらいです。
0572デフォルトの名無しさん
2016/01/23(土) 19:54:39.20ID:d6eRWlmRエクセルの1シートを1テーブルに見立ててデータの抽出、計算をしようと思っています。
ただデータの検索をクエリを書くのと同様に行えるのかが気になっています。
例えばSQLだとselect * from t where c < 10 and c > 0 と範囲検索が簡単に出来ますが、
エクセルvbaだとfind、findnext結果を順々に見ていくしかないんでしょうか?
access使えと言われるかも知れませんが自分も作ったものを使う人も
使ったことないので使う予定でないです。
0573デフォルトの名無しさん
2016/01/23(土) 19:55:52.13ID:UyBsumDJサンプルで作ってみたのですが、思った通りの動作ができません・・・
改善点をお分かりになりますでしょうか?
Sub jikkou()
Dim Keyword As Range
Dim CheckList As Range
Dim Checkcolumn As Long
With ActiveWorkbook.Worksheets("Sheet1")
Set Keyword = .Range("F2:F4") '順に田中、山田、井上
Set CheckList = .Range("A2:C9")
Checkcolumn = 2
Call Test(Keyword, CheckList, Checkcolumn)
End With
End Sub
0574デフォルトの名無しさん
2016/01/23(土) 20:12:01.85ID:9iIZKcSaたぶんSheet1に書いてない
0575デフォルトの名無しさん
2016/01/23(土) 22:41:50.10ID:rT+4QcAA使ったことないけどODBCでExcel読めるんだから同じように出来るんじゃなかろうか
0576デフォルトの名無しさん
2016/01/23(土) 22:56:00.52ID:VVSBE+9kODBCだけど
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}
で普通にWHEREが効いたよ。
0577デフォルトの名無しさん
2016/01/23(土) 23:11:55.10ID:Lyhv/FJb0578デフォルトの名無しさん
2016/01/23(土) 23:31:40.97ID:d6eRWlmR>>576
成る程!
エクセルからODBCする発想はありませんでした。
ありがとうございます。
0579デフォルトの名無しさん
2016/01/24(日) 00:52:16.69ID:3BacWB5Qunion(range("A1:A3"),range("A4:A6")).select
とすると A1:A6がセレクトされてしまいます
A1:A3,A4:A6とばらばらに選択させるにはどうしたらいいのでしょうか
0580デフォルトの名無しさん
2016/01/24(日) 01:02:59.65ID:8yNc66kpRange("A1:A3, A4:A6").Select
0581デフォルトの名無しさん
2016/01/24(日) 01:24:07.69ID:3BacWB5QRangeを使った場合
少ないとOKなのですが
Range("A1:A3,A4:A6,A7:A9,A10:A12,A13:A15,A16:A18,A19:A21,A22:A24,A25:A27,A28:A30,A31:A33,A34:A36,A37:A39,A40:A42,A43:A45,A46:A48,A49:A51,
A52:A54,A55:A57,A58:A60,A61:A63,A64:A66,A67:A69,A70:A72,A73:A75,A76:A78,A79:A81,A82:A84,A85:A87,A88:A90").Select
多いとエラーになってしまうんですよ
Range("A1:A3,A4:A6,A7:A9,A10:A12,A13:A15,A16:A18,A19:A21,A22:A24,A25:A27,A28:A30,A31:A33,A34:A36,A37:A39,A40:A42,A43:A45,A46:A48,A49:A51,
A52:A54,A55:A57,A58:A60,A61:A63,A64:A66,A67:A69,A70:A72,A73:A75,A76:A78,A79:A81,A82:A84,A85:A87,A88:A90,
A91:A93,A94:A96,A97:A99,A100:A102,A103:A105,A106:A108,A109:A111,A112:A114,A115:A117,A118:A120,A121:A123,A124:A126,A127:A129,A130:A132,
A133:A135,A136:A138,A139:A141,A142:A144,A145:A147,A148:A150,A151:A153,A154:A156,A157:A159,A160:A162,A163:A165,A166:A168").Select
0582デフォルトの名無しさん
2016/01/24(日) 04:40:05.83ID:QDUQ11dLunion使いたくないってことなら適当な長さで区切って処理していくしかないね
0583デフォルトの名無しさん
2016/01/24(日) 08:31:19.18ID:P3FwbSRP0584デフォルトの名無しさん
2016/01/24(日) 08:43:14.19ID:OLLhmKw50585デフォルトの名無しさん
2016/01/24(日) 10:14:46.19ID:EERzV+Td0586デフォルトの名無しさん
2016/01/24(日) 10:17:27.22ID:U2BkwJ1U0587デフォルトの名無しさん
2016/01/24(日) 10:54:59.26ID:jAR/7hik理研の職員がwinnyでウィルス感染→個人情報流出?2
http://wc2014.2ch.net/test/read.cgi/rikei/1284822425/
27 名前:名無しゲノムのクローンさん[] 投稿日:2015/05/07(木) 22:59:50.36 ID:dgLqosr8Q
http://www.riken.jp/research/labs/bsi/behav_neurophysiol/
姓が変わってる
■ このスレッドは過去ログ倉庫に格納されています