トップページtech
1001コメント393KB

Excel VBA 質問スレ Part36 [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/01/09(金) 16:59:02.80ID:GzFHQ3J4
ExcelのVBAに関する質問スレです

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Applications』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

前スレ:Excel VBA 質問スレ Part35
http://peace.2ch.net/test/read.cgi/tech/1414186311/

関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0666デフォルトの名無しさん2015/03/09(月) 20:13:38.37ID:YIVcJxyO
>>664
ZIPファイルに圧縮w
0667デフォルトの名無しさん2015/03/09(月) 20:24:33.59ID:b0X+6jZ8
>>665
ブックにパスワード設定ではなくて、VBAの画面で

VBAProject - プロジェクトプロパティ
表示して、[保護]タブをクリックして
パスワード       ********
パスワード確認入力 ********

って入れるとパスワード設定できますよね。
この操作を、こういう手作業でやるんではなくて、そのxlsmファイルがWindowsのどこかのフォルダに保管して
あるとして、そのxlsmファイルを何らかのプログラムか何かの方法で、パスワード設定出来ないかなという
質問です。そんな事は無理かな。
0668デフォルトの名無しさん2015/03/09(月) 20:33:26.16ID:nxAcVNnz
>>667
VBAProject パスワード 設定 で調べたら、
「出来ない事はないけどウィルスプログラムみたいなものなのでアンチウィルスソフトに引っかかるかもね」という回答を見つけたが。
06695602015/03/09(月) 21:01:35.47ID:R+XoG9o+
VBScript とか他のブックのマクロとか、COM 経由でやればできるんじゃね?
http://officetanaka.net/excel/vba/sheet/sheet07.htm
0670デフォルトの名無しさん2015/03/09(月) 21:04:53.18ID:R+XoG9o+
すまん、
>>667 > ブックにパスワード設定ではなくて
を見てなかったわ
>>669 は忘れてくれ
0671デフォルトの名無しさん2015/03/09(月) 21:53:01.84ID:7i5N+fBw
エクセルの最後の行の次の業を選択するマクロというかコードってありますかね?
例えば、

1:あいうえを
2:かきくけこ
3:さしすてそ
4:

とあって、4行目にたちつてとと入力するようなマクロを組みたい場合に
使えるようなマクロなのですが・・・
0672デフォルトの名無しさん2015/03/09(月) 22:12:11.05ID:YIVcJxyO
>>671
あるよ!

1行目から下に空白セルを探したり

最終行から上にデータあるセルをさがして+1したり
0673デフォルトの名無しさん2015/03/09(月) 23:02:07.53ID:7i5N+fBw
>>672
ありがとうございます
できれば教えて欲しいのですが・・・
0674デフォルトの名無しさん2015/03/09(月) 23:25:01.72ID:YIVcJxyO
>>673
>>1より抜粋
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0675デフォルトの名無しさん2015/03/09(月) 23:51:28.94ID:7i5N+fBw
>>672のどこにヒントの要素があるのか理解できませんが、
いずれにせよここでは解答が得られないのはよく分かりました。
スレ汚し申し訳ありませんでした。
0676デフォルトの名無しさん2015/03/10(火) 00:54:03.77ID:iHRWoavL
はいさようなら
次の方どうぞー
0677デフォルトの名無しさん2015/03/10(火) 03:44:57.92ID:jIX0x7uH
>>671
vba 最終行でググれば出てくるよ。
0678デフォルトの名無しさん2015/03/10(火) 20:07:26.42ID:2lxItQGz
>>675
1.RangeオブジェクトやCellsにはEnd()プロパティというのがあってCtrl+矢印を押した時と同じ働きをする。
2.Rows.CountとColumns.Countはそれぞれ指定された範囲内の行列最大値を返す。
3.Offsetは任意のセルからの相対的な位置を返す。
4.WorksheetオブジェクトにはUsedRangeというオブジェクトがあって現在、データの入っている領域を矩形範囲で返す。
5.Worksheet.Cellsは一つのワークシートが使用できる全ての行列を表す。
0679デフォルトの名無しさん2015/03/11(水) 00:23:55.81ID:eJ0rWRB5
なんか別スレでコード書いて貰ってたよ
0680デフォルトの名無しさん2015/03/11(水) 01:03:48.05ID:0W10G8DZ
Excelの1シートのセルの数には制限がありますが
・2003…65,536行×256列
・2007…1,048,576行×16,384列
・2010…1,048,576行×16,384列

全セルに10桁程度の数を入力して埋めていった場合
実用範囲は何シートぐらいまででしょうか?
0681デフォルトの名無しさん2015/03/11(水) 01:59:25.09ID:eJ0rWRB5
それを聞いてどうする?
何に使うんだ?
単純に冷やかしているようにしか見えないんだが。
0682デフォルトの名無しさん2015/03/11(水) 02:18:06.22ID:0W10G8DZ
>>681
とあるビックデータ解析です。
VBA以外は詳しくないので
すべてExcelで処理してみようかとあれこれ試行錯誤中です
最近1GBほどの容量のブックファイルがやや重いながらも
動作には問題無く動く事を知りました。
0683デフォルトの名無しさん2015/03/11(水) 02:28:45.90ID:Y69XOrvE
環境に依存するから自分で試すべきだし
VBAに無関係でしょ
0684デフォルトの名無しさん2015/03/11(水) 02:37:37.26ID:0W10G8DZ
>>683
自分でも調べますが
この手の事に詳しい人がいたら聞いた方が確実に早いかと
あとVBA処理することを前提に考えてますのでここで質問しました
0685デフォルトの名無しさん2015/03/11(水) 02:48:15.49ID:0W10G8DZ
>>683
>>680
ちょっと試して見た。
Excel2003で
1シート
・2003…65,536行×256列
を数字で埋めた場合約250メガバイトほどのファイルサイズになるようで
1GBを実用範囲とすると4〜5シートまで使用可能?
シートを開いたり保存したりするのには時間がかかるが
そのデータを元に集計を行うVBAが極端に遅くなく動けば実用範囲です。
0686デフォルトの名無しさん2015/03/11(水) 04:12:40.27ID:6SLte7oT
マシンスペックも書かずにそんなこと言われても何の参考にもなりゃしない
0687デフォルトの名無しさん2015/03/11(水) 05:57:52.20ID:/+JGHz5q
俺も会社でデータベース作ろうとしているから興味があって実験してみたけど、
"TEST"の四文字を一行16,384セルに詰めて64KB、コピーしまくったら250,000行で止まって15GB強。
セルのデータだけでメモリーいっぱいまで使えてしまうから「必要環境」はデータ領域+マクロの変数領域って考えりゃいいのかな。

それと気になったのは、ひらがなを256文字入れて一行分コピーしてみたんだけど、
計算上は8MB行くはずなのに2.7MBくらいしかいかなかったんだけど、どういう容量の取り方になってんだろ。
0688デフォルトの名無しさん2015/03/11(水) 07:18:06.75ID:Te5AMx4Z
ビッグ・データってんなら素直にデータベース使う方向で考えろよ
VBA以外は詳しくないってんならこの機会に覚えれば良いだろ。後、統計解析ならR
0689デフォルトの名無しさん2015/03/11(水) 07:19:04.52ID:mbZuxei0
xlsxってzipファイルだよな
0690デフォルトの名無しさん2015/03/11(水) 17:13:06.87ID:HQzc8cpY
>>689
うむ
0691デフォルトの名無しさん2015/03/11(水) 17:38:51.43ID:ZMdmfMKq
>>689
どういうことだ?
0692デフォルトの名無しさん2015/03/11(水) 18:02:06.25ID:pAchRHiO
拡張子をリネームしてみ
0693デフォルトの名無しさん2015/03/11(水) 18:45:05.93ID:8Wvfa6i6
単なるzipアーカイブだから圧縮率変えて再圧縮なんてのもあるね
0694デフォルトの名無しさん2015/03/11(水) 20:10:19.19ID:/+JGHz5q
>>688
大きな会社(特に昔からある会社)ほど自由にソフト触れないんだよ。
既存のソフトで代替出来る限りは「こういう便利なのがあるんですけど」って言っても要求通らないし。
0695デフォルトの名無しさん2015/03/11(水) 20:14:05.56ID:lYcCfnhh
>>685
ブック・オープン -> シート上のデータ読み込み -> ブック・クローズ -> 最初に戻る
していけばいい。I/Oのオーバーヘッドは加わるけど、メモリ・リソースの限度はなんとかなるだろう。
0696デフォルトの名無しさん2015/03/11(水) 23:55:33.99ID:i5IX39mp
エクセルで処理できるビッグデータってなんだ?
ビッグデータ言いたいだけちゃうんか
0697デフォルトの名無しさん2015/03/12(木) 00:04:11.00ID:kI3K8SOY
お前がビッグデータと呼べば、それはいつだってビッグデータなんだ。
ビッグデータはお前を裏切らない。
0698デフォルトの名無しさん2015/03/12(木) 00:19:12.57ID:lHipq8Mi
これを見てごらん?
すごく・・・ビッグデータです・・・(ぽっ
0699デフォルトの名無しさん2015/03/12(木) 00:21:50.08ID:sDEFzeK3
一覧データがあってある列でオートフィルターをかけて抽出し、一列目にあるチェックボタンがクリックでチェックされた行だけCSVで出力というコードをおしえてください。一括チェック、解除などもあればありがたいです。
0700デフォルトの名無しさん2015/03/12(木) 00:23:26.70ID:RhmAAC27
数値データだけで1GBを越えたらビックデータと聞いたけど
それを1000ファイル作って1テラなら確実にビックデータだろう
VBAならそれを生成することも解析することも適切にやればさほど難しい事ではない
つまり工夫すればVBAでビックデータ解析は可能に違いないと見ている。まだやったことないけど。
0701デフォルトの名無しさん2015/03/12(木) 00:36:47.34ID:RhmAAC27
>>700
1ギガ これは古い本で読んだ情報だけどググったら今は全然違ってるみたい
http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%82%B0%E3%83%87%E3%83%BC%E3%82%BF
>2012年現在数十テラバイトから数ペタバイトの範囲である。
10テラ分割すれば出来なくはないだろうけどExcelだけだとしんどいだろうね。
ペタはさすがに無理かな。
0702デフォルトの名無しさん2015/03/12(木) 00:40:46.61ID:RhmAAC27
ペタバイトの数値データがExcelとVBAで軽々と処理できれば無敵だろうね。 マイクロソフトさん早期実現宜しくお願いします!!
0703デフォルトの名無しさん2015/03/12(木) 00:48:51.52ID:lHipq8Mi
そこまでするならせめてSQLServerと連携しろよw
0704デフォルトの名無しさん2015/03/12(木) 05:05:50.73ID:Grza6kM6
HPC Services for Excelって言うのがある
あるのは知ってるが実際に動いてるのものはしらないがw
0705デフォルトの名無しさん2015/03/12(木) 09:42:18.78ID:ilfcLh2n
>>680
集計とかやると、フルに使うまでもなく速度的に1シートも無理
0706デフォルトの名無しさん2015/03/12(木) 15:21:44.53ID:lKLpS/FL
Msgboxの文字列をコピー可能にする方法はない?
0707デフォルトの名無しさん2015/03/12(木) 15:36:32.45ID:FCsQ0GgG
>>706
普通のMsgBox()なら、コピーできるよ。
コピペすると、こんな文字列になってる。
---------------------------
Microsoft Excel
---------------------------
abcde
---------------------------
OK
---------------------------
0708デフォルトの名無しさん2015/03/12(木) 23:35:31.11ID:sDEFzeK3
Excelの特定範囲を、CSV形式で保存したいのですが、名前を付けて保存してもアクティヴワークブックをcsvファイルではなく、元のExcelファイルのままにできないのでしょうか?
0709デフォルトの名無しさん2015/03/12(木) 23:50:08.33ID:lTudpg1Y
特定範囲だけ別のシートに貼ってそれをCSVにすれば良いだけの話では?
0710デフォルトの名無しさん2015/03/13(金) 00:13:10.12ID:FCcf3p6z
>>709
別のワークシートだとアクティヴのワークブックはcsvになってしまいます。
別のワークブックを作成し、CSV保存し、ワークブックを閉じるのがよさそうですね
0711デフォルトの名無しさん2015/03/13(金) 02:59:56.91ID:8nJWpwmC
savecopyasって保存形式選べないんだっけ?
csv閉じるのもいいけど元ファイルを開いたままにしたいなら、
ブックをオブジェクトに保存
csvにしたいシートを新規ブックにコピー
新規ブックをcsvで保存
元ファイルを最初に保存しといたオブジェクトでactivate
0712デフォルトの名無しさん2015/03/13(金) 06:01:55.13ID:z8zfhg7x
シート上のrangeってどうやって取得してる?
0713デフォルトの名無しさん2015/03/13(金) 07:16:47.77ID:Fstr6ZGS
Range.CurrentRegionで
0714デフォルトの名無しさん2015/03/13(金) 08:10:07.94ID:aid4kS/u
それだと島になった孤立セル領域を含められないだろ
0715デフォルトの名無しさん2015/03/13(金) 12:25:47.41ID:8nJWpwmC
activewindow.rangeselection
0716デフォルトの名無しさん2015/03/13(金) 20:11:02.77ID:z8zfhg7x
>>713
>>715
あり
0717デフォルトの名無しさん2015/03/14(土) 09:38:49.78ID:rFJ2VspZ
素人です。教えてください。

エクセルで作業標準書を作って作業してもらっているのですが、
そこに作業時間を表示したいのですが、作業から離れるときに
ポーズ機能をつけたり、終わるときに別のシートに時間を書き込みに行くことは
可能でしょうか?
0718デフォルトの名無しさん2015/03/14(土) 10:48:54.96ID:6UgO5ZeW
>>717
作業開始、離席、再開、終了時になんかクリックとかしてもらえるなら可能
0719デフォルトの名無しさん2015/03/14(土) 13:18:26.47ID:rFJ2VspZ
>>718 ということは、全部ボタンを作ればいけるのですね。
各プログラムマクロを各ボタンにつければいけますか?
0720デフォルトの名無しさん2015/03/14(土) 13:39:31.91ID:sptcMfeO
>>717
可能だけどそんか細かい監視は嫌われますよ?
仕事の品質チェックならもう少し従業員のことを考えてあげないとうまく行かないと思います
0721デフォルトの名無しさん2015/03/14(土) 13:46:19.34ID:rFJ2VspZ
>>720 えっ そうですかね・・・ 大企業とか行ってないのですかね?
0722デフォルトの名無しさん2015/03/14(土) 14:12:26.09ID:VDfRGL41
コールセンターとかなら普通にやってる
0723デフォルトの名無しさん2015/03/14(土) 14:45:54.25ID:6mV+XECP
ストップウォッチ持たせて自分で記入させたほうが結果にコミットできると思うけどなぁ
0724デフォルトの名無しさん2015/03/14(土) 14:52:29.87ID:cCfCziOy
ブゥーチブゥーチッ

結局そういうのだと信頼性に欠けるしなぁ
0725デフォルトの名無しさん2015/03/14(土) 15:15:42.38ID:LSaN/4Jd
工場だと部品や製品にバーコードみたいなもの付けて
作業前後に読み取らせる、くらいのことはやってるところが
あるかもしれない。

工数や工程進捗の把握かな。作業者と紐付けることも
やっているかもしれん。

で、>>717だが、エクセルの作業で、用足しや電話の応対、
誰かに呼ばれたりなんてこともあるかと思うが、いちいち中断の
ための作業をするのは非現実的じゃないかな。

本人に今やっている仕事にどれだけ時間を費やしているか
認識させるためなら、キッチンタイマー(カウントアップできる
ものもある)とかじゃダメ?
0726デフォルトの名無しさん2015/03/14(土) 15:37:02.09ID:ZYVj/NvC
>>721
あなたの会社の規模によるとおもう。
0727デフォルトの名無しさん2015/03/14(土) 15:38:41.23ID:6mV+XECP
画像認識で持ち場を離れたことを検知してはどうだろう

うちもストップウォッチ(キッチンタイマーだけど)を持たせてるけど、間違いなく押し忘れてどっか行く
特に客が来たときは放置したままになりやすい
色々やらせるのがそもそもダメっていうのはあるけど、そこまで抜本対策をとるのは難しいだろう

パソコン操作させるのは時間のロスにもなるし、ミスの原因にもなる
フットペダルや大きいボタンなど周辺機器と連動させてはどうか
フットペダルならわりと安価でボタン割り当てもできるタイプもあるし、手を使わなくていい

ただ、その方向でがんばりすぎてトイレ標準時とか作り始めると士気が落ちる
柔軟にやってほしい部分をやらなくなって注意すると「(言われたことは)ちゃんとやったでしょ」という態度になっていく
まぁ、タバコやトイレで体調を自己管理させるのとどっちが効率いいかは微妙なところ

ちなみにこっちは工場じゃないからね
0728デフォルトの名無しさん2015/03/14(土) 18:35:08.33ID:rFJ2VspZ
みなさん ありがとう。
まぁ勉強がてら、いろいろプログラムを組んでみます。
0729デフォルトの名無しさん2015/03/14(土) 20:19:47.42ID:YK5dNgNX
VBAに関係ないのにみんなやさしいなw
0730デフォルトの名無しさん2015/03/15(日) 01:00:10.65ID:Oue+f2XF
現在のcolorindexを RGBに変換する方法はありますか?
colorindexを変更しまくっているため、既定値とは大きく違ってしまっています。
0731デフォルトの名無しさん2015/03/15(日) 03:56:42.56ID:Nu00PGZt
>>730
ColorIndexで設定した後にColorで取り出せばいいんじゃね。
0732デフォルトの名無しさん2015/03/15(日) 22:48:16.06ID:Oto6pkxv
>>731
ありがとうございます。
colorって設定ばかりだったから、読めることを思いつきませんでした。
0733デフォルトの名無しさん2015/03/16(月) 19:39:17.63ID:tk5ie8LU
1番厳密にプロパティ、メソッド調べられるのってオブジェクトエクスプローラ?
0734デフォルトの名無しさん2015/03/16(月) 21:32:02.14ID:3ZODMEse
文字列を格納して、”,”等で区切って配列に格納したいのですが、できますでしょうか?
その場合、文字列の中身は確定していないものとして、配列サイズは動的に変更できますか?
0735デフォルトの名無しさん2015/03/17(火) 01:34:13.86ID:Vi/eJRXz
Rubyでは文字列を、指定した区切り文字で区切って、
配列に格納してくれる

str = "A,B,C"

ary = str.split(/,/)
0736デフォルトの名無しさん2015/03/17(火) 02:35:49.91ID:/aRClwjb
>>734
str ←分割したい「,」入りの変数
dim val() as string, cnt as long
dim pos_cur as long, pos_next as long
pos_cur = 0
cnt = 0
do while true
pos_next = instr(",", str, pos_cur + 1)
if pos_next > 0 then
redim preserve val(cnt)
val(cnt) = mid(str, pos_cur + 1, pos_next - pos_cur - 1)
cnt = cnt + 1
pos_cur = pos_next
else
exit do
end if
loop
0737デフォルトの名無しさん2015/03/17(火) 03:40:10.86ID:Z0NUyV+t
>>733
実装調べるならまあそうだろうけど
ドキュメントにないプロパティとかでてもなぁ、という事もある

>>734
Split関数
0738デフォルトの名無しさん2015/03/17(火) 17:20:47.84ID:t2kdwNkI
http://yahoo.jp/box/uEInsU
VBAで組もうと思ったのですが、いかんせん高校の情報で習った知識しかなく、自分で組んだところ、
データ検索を押すと無限ループに陥ってしまい、うまくいきません。
初歩的な質問で申し訳ないのですがこのVBAを組む足がかりを教えていただけませんか?
0739デフォルトの名無しさん2015/03/17(火) 18:25:04.03ID:vCwecCoL
>>738
ダウンロードしてみたけど、コードが無いんだが。
0740デフォルトの名無しさん2015/03/17(火) 18:32:25.71ID:vCwecCoL
シートの内容だけ見たが、参考記録シートのレイアウトが良くない。
全競技横に並べると便利。
そうすれば、worksheets("参考記録").rows(1).find("400mH")とかで、競技を見つけられる。
あるいは、1競技1シートにすれば、探す必要がなくなる。
0741デフォルトの名無しさん2015/03/17(火) 18:41:56.57ID:t2kdwNkI
>>739,740
ご指摘ありがとうございます。前回作ったやつが強制終了でデータが消えてしまったようです。
740の意見を参考にしたいと思います。
Ifを使って、名前と競技結果が一致したら出力sheetに出力という関数を自前でやってみたのですが、
別々のsheetにあるものを同時に出力させる技術がなく、わけのわからないコードになってしまって、Loopした覚えがあります。
もう少しコンパクトにいける技術はあるのでしょうか?
0742デフォルトの名無しさん2015/03/18(水) 11:21:30.00ID:OporZNyH
DoEvent入れても応答なしになる。ESCもCtrlPauseもダメ。
Excel2013ってなんかエラー含みな気がするなぁ。
0743デフォルトの名無しさん2015/03/18(水) 13:02:18.09ID:BjLPqBwu
まずマクロ記録をマスターすべきだな
0744デフォルトの名無しさん2015/03/18(水) 16:58:02.44ID:wrJQV04f
あ、やっぱDoEventってそうなるよね?
俺だけかと思ってた
0745デフォルトの名無しさん2015/03/18(水) 17:45:23.15ID:lQVpCBZN
まさか、多重にDoEventしているとかいう初心者以前の状況じゃないよね?(´・ω・`)
0746デフォルトの名無しさん2015/03/18(水) 19:15:40.13ID:eDH0ZGAY
>>742
マルチスレッドならイケるんじゃね
0747デフォルトの名無しさん2015/03/18(水) 19:34:48.73ID:wrJQV04f
マルチスレッド対応してるの?API使ってとかじゃなくて?
0748デフォルトの名無しさん2015/03/18(水) 23:55:16.37ID:ga8Jk3h7
エクセルの関数って実体のファイルは、どこかの.dllだったりするの?
0749デフォルトの名無しさん2015/03/19(木) 12:35:13.54ID:7c4CnP4H
>>748
それ知ったところでエクセルの外からは使えんと思うぞ
何がしたいねん?
0750デフォルトの名無しさん2015/03/19(木) 15:43:57.39ID:1I3TwXi1
2つ質問させてください。

@2次元配列(100×4のinteger型)の2番目列の最大値を出すには総当たりしかないですか?

Aa、b、cという3つの変数に一括で同じ数値を入れる方法ありますか?

よろしくお願いします。
0751デフォルトの名無しさん2015/03/19(木) 16:28:51.44ID:VVf+EvQX
>>750
1:しかない
2:ない
0752デフォルトの名無しさん2015/03/19(木) 16:55:23.35ID:1I3TwXi1
>>751
ありがとうございました
0753デフォルトの名無しさん2015/03/19(木) 17:33:29.58ID:76Yv278k
>>750
1.max関数
0754デフォルトの名無しさん2015/03/19(木) 20:09:37.07ID:ygDVwDTU
>>753
max関数に引数を一気に入れる方法がない以上、総当たりだろ。
0755デフォルトの名無しさん2015/03/19(木) 20:20:15.65ID:DWTmmRVl
Dim WS as Worksheet,二次元配列(100,4) as Integer,最大値 as Integer

Set WS = Worksheets.add
Range(WS.Cells(1,1),WS.cells(100,4)) = 二次元配列
最大値 = Worksheetfunction.Max(WS.Range("B:B")

という事ではなくて?
0756デフォルトの名無しさん2015/03/19(木) 20:29:32.37ID:HCELgKhO
>>749
仕組みがしりたい
07577502015/03/19(木) 20:55:09.14ID:B57QaUqn
>>755
一度ワークシートに転記すればできるんですが
配列の中だけでできる方法がないかと思いまして。
0758デフォルトの名無しさん2015/03/19(木) 21:23:50.49ID:DWTmmRVl
>>757
俺も今日、ちょうどそういう問題に当たってネットで調べたりしながら試行錯誤してたけど、
結局は廃棄可能なワークシートを使うのが一番簡単だという結論にたどり着いた。
エクセルVBAはそこまで親切なシステムしてない。
というかシートなら少なくとも三次元配列までは表現できるから配列内を自由に弄りたければArrayはシートで表現する方が効率的。

ちなみに「エクセルが足かせになるなら、もうVBS使っちゃえばいいんじゃね?」という方向もある。
0759デフォルトの名無しさん2015/03/19(木) 21:34:06.05ID:B57QaUqn
>>758
ワークシート使うと処理速度が落ちるので避けたかったんです。
けっきょく総当たりに落ち着きました。
0760デフォルトの名無しさん2015/03/19(木) 21:59:12.43ID:d+3glag/
Sub TEST()
Dim testData As Variant
testData = ActiveSheet.Range("A1:D100")

With WorksheetFunction
Debug.Print .Max(.Index(.Transpose(testData, 2, 0)))
End With
End Sub

WorksheetFunction使いまくりで一応取得できる
.Transpose外せば行の最大値もとれるよ
0761デフォルトの名無しさん2015/03/19(木) 22:00:24.09ID:i95v39FG
いや・・ループ回せば終わるやろ(´・ω・`;)
0762デフォルトの名無しさん2015/03/19(木) 22:01:31.59ID:d+3glag/
Debug.Print .Max(.Index(.Transpose(testData), 2, 0))
閉じかっこ修正
0763デフォルトの名無しさん2015/03/19(木) 22:01:34.03ID:gLg2znKB
>>758
>Arrayはシートで表現する方が効率的。
とはどういう意味?
Arrayのままで十分効率的に扱えると思うけど。
それともループ処理が大嫌いとか?
0764デフォルトの名無しさん2015/03/19(木) 22:52:50.19ID:DWTmmRVl
>>763
「自由に弄りたいなら」という前提が何故抜けた。
一次元配列の操作で事足りる様な単純な処理ならまだしも
複数列に複数条件のフィルタかけて全ての情報を目的別に振り分けるみたいな複雑な処理の状況の場合はシートの方が効率いいんだよ。

だいたいエクセルで弄る事が前提になっている以上は配列の内容だってセルのどっかに記録されている状況の方が多いわけで、
わざわざ配列に値を入れるくらいならcopyしてシート上で扱う方が処理も速いし自由度が高い。

そりゃArrayのままで効率的に処理出来る条件下だけで語るなら「Arrayのままで十分効率がいい」んだろうけどさ。
0765デフォルトの名無しさん2015/03/19(木) 22:58:28.78ID:gLg2znKB
そりゃすまんかった。
人それぞれとしか言いようがないわな。
■ このスレッドは過去ログ倉庫に格納されています