Excel VBA 質問スレ Part36 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/01/09(金) 16:59:02.80ID:GzFHQ3J4★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:YIVcJxyOZIPファイルに圧縮w
0667デフォルトの名無しさん
2015/03/09(月) 20:24:33.59ID:b0X+6jZ8ブックにパスワード設定ではなくて、VBAの画面で
VBAProject - プロジェクトプロパティ
表示して、[保護]タブをクリックして
パスワード ********
パスワード確認入力 ********
って入れるとパスワード設定できますよね。
この操作を、こういう手作業でやるんではなくて、そのxlsmファイルがWindowsのどこかのフォルダに保管して
あるとして、そのxlsmファイルを何らかのプログラムか何かの方法で、パスワード設定出来ないかなという
質問です。そんな事は無理かな。
0668デフォルトの名無しさん
2015/03/09(月) 20:33:26.16ID:nxAcVNnzVBAProject パスワード 設定 で調べたら、
「出来ない事はないけどウィルスプログラムみたいなものなのでアンチウィルスソフトに引っかかるかもね」という回答を見つけたが。
0669560
2015/03/09(月) 21:01:35.47ID:R+XoG9o+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あるよ!
1行目から下に空白セルを探したり
最終行から上にデータあるセルをさがして+1したり
0673デフォルトの名無しさん
2015/03/09(月) 23:02:07.53ID:7i5N+fBwありがとうございます
できれば教えて欲しいのですが・・・
0674デフォルトの名無しさん
2015/03/09(月) 23:25:01.72ID:YIVcJxyO>>1より抜粋
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0675デフォルトの名無しさん
2015/03/09(月) 23:51:28.94ID:7i5N+fBwいずれにせよここでは解答が得られないのはよく分かりました。
スレ汚し申し訳ありませんでした。
0676デフォルトの名無しさん
2015/03/10(火) 00:54:03.77ID:iHRWoavL次の方どうぞー
0677デフォルトの名無しさん
2015/03/10(火) 03:44:57.92ID:jIX0x7uHvba 最終行でググれば出てくるよ。
0678デフォルトの名無しさん
2015/03/10(火) 20:07:26.42ID:2lxItQGz1.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:eJ0rWRB50680デフォルトの名無しさん
2015/03/11(水) 01:03:48.05ID:0W10G8DZ・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とあるビックデータ解析です。
VBA以外は詳しくないので
すべてExcelで処理してみようかとあれこれ試行錯誤中です
最近1GBほどの容量のブックファイルがやや重いながらも
動作には問題無く動く事を知りました。
0683デフォルトの名無しさん
2015/03/11(水) 02:28:45.90ID:Y69XOrvEVBAに無関係でしょ
0684デフォルトの名無しさん
2015/03/11(水) 02:37:37.26ID:0W10G8DZ自分でも調べますが
この手の事に詳しい人がいたら聞いた方が確実に早いかと
あとVBA処理することを前提に考えてますのでここで質問しました
0685デフォルトの名無しさん
2015/03/11(水) 02:48:15.49ID:0W10G8DZ>>680
ちょっと試して見た。
Excel2003で
1シート
・2003…65,536行×256列
を数字で埋めた場合約250メガバイトほどのファイルサイズになるようで
1GBを実用範囲とすると4〜5シートまで使用可能?
シートを開いたり保存したりするのには時間がかかるが
そのデータを元に集計を行うVBAが極端に遅くなく動けば実用範囲です。
0686デフォルトの名無しさん
2015/03/11(水) 04:12:40.27ID:6SLte7oT0687デフォルトの名無しさん
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:Te5AMx4ZVBA以外は詳しくないってんならこの機会に覚えれば良いだろ。後、統計解析ならR
0689デフォルトの名無しさん
2015/03/11(水) 07:19:04.52ID:mbZuxei00690デフォルトの名無しさん
2015/03/11(水) 17:13:06.87ID:HQzc8cpYうむ
0691デフォルトの名無しさん
2015/03/11(水) 17:38:51.43ID:ZMdmfMKqどういうことだ?
0692デフォルトの名無しさん
2015/03/11(水) 18:02:06.25ID:pAchRHiO0693デフォルトの名無しさん
2015/03/11(水) 18:45:05.93ID:8Wvfa6i60694デフォルトの名無しさん
2015/03/11(水) 20:10:19.19ID:/+JGHz5q大きな会社(特に昔からある会社)ほど自由にソフト触れないんだよ。
既存のソフトで代替出来る限りは「こういう便利なのがあるんですけど」って言っても要求通らないし。
0695デフォルトの名無しさん
2015/03/11(水) 20:14:05.56ID:lYcCfnhhブック・オープン -> シート上のデータ読み込み -> ブック・クローズ -> 最初に戻る
していけばいい。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:sDEFzeK30700デフォルトの名無しさん
2015/03/12(木) 00:23:26.70ID:RhmAAC27それを1000ファイル作って1テラなら確実にビックデータだろう
VBAならそれを生成することも解析することも適切にやればさほど難しい事ではない
つまり工夫すればVBAでビックデータ解析は可能に違いないと見ている。まだやったことないけど。
0701デフォルトの名無しさん
2015/03/12(木) 00:36:47.34ID:RhmAAC271ギガ これは古い本で読んだ情報だけどググったら今は全然違ってるみたい
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:RhmAAC270703デフォルトの名無しさん
2015/03/12(木) 00:48:51.52ID:lHipq8Mi0704デフォルトの名無しさん
2015/03/12(木) 05:05:50.73ID:Grza6kM6あるのは知ってるが実際に動いてるのものはしらないがw
0705デフォルトの名無しさん
2015/03/12(木) 09:42:18.78ID:ilfcLh2n集計とかやると、フルに使うまでもなく速度的に1シートも無理
0706デフォルトの名無しさん
2015/03/12(木) 15:21:44.53ID:lKLpS/FL0707デフォルトの名無しさん
2015/03/12(木) 15:36:32.45ID:FCsQ0GgG普通のMsgBox()なら、コピーできるよ。
コピペすると、こんな文字列になってる。
---------------------------
Microsoft Excel
---------------------------
abcde
---------------------------
OK
---------------------------
0708デフォルトの名無しさん
2015/03/12(木) 23:35:31.11ID:sDEFzeK30709デフォルトの名無しさん
2015/03/12(木) 23:50:08.33ID:lTudpg1Y0710デフォルトの名無しさん
2015/03/13(金) 00:13:10.12ID:FCcf3p6z別のワークシートだとアクティヴのワークブックはcsvになってしまいます。
別のワークブックを作成し、CSV保存し、ワークブックを閉じるのがよさそうですね
0711デフォルトの名無しさん
2015/03/13(金) 02:59:56.91ID:8nJWpwmCcsv閉じるのもいいけど元ファイルを開いたままにしたいなら、
ブックをオブジェクトに保存
csvにしたいシートを新規ブックにコピー
新規ブックをcsvで保存
元ファイルを最初に保存しといたオブジェクトでactivate
0712デフォルトの名無しさん
2015/03/13(金) 06:01:55.13ID:z8zfhg7x0713デフォルトの名無しさん
2015/03/13(金) 07:16:47.77ID:Fstr6ZGS0714デフォルトの名無しさん
2015/03/13(金) 08:10:07.94ID:aid4kS/u0715デフォルトの名無しさん
2015/03/13(金) 12:25:47.41ID:8nJWpwmC0717デフォルトの名無しさん
2015/03/14(土) 09:38:49.78ID:rFJ2VspZエクセルで作業標準書を作って作業してもらっているのですが、
そこに作業時間を表示したいのですが、作業から離れるときに
ポーズ機能をつけたり、終わるときに別のシートに時間を書き込みに行くことは
可能でしょうか?
0718デフォルトの名無しさん
2015/03/14(土) 10:48:54.96ID:6UgO5ZeW作業開始、離席、再開、終了時になんかクリックとかしてもらえるなら可能
0719デフォルトの名無しさん
2015/03/14(土) 13:18:26.47ID:rFJ2VspZ各プログラムマクロを各ボタンにつければいけますか?
0720デフォルトの名無しさん
2015/03/14(土) 13:39:31.91ID:sptcMfeO可能だけどそんか細かい監視は嫌われますよ?
仕事の品質チェックならもう少し従業員のことを考えてあげないとうまく行かないと思います
0721デフォルトの名無しさん
2015/03/14(土) 13:46:19.34ID:rFJ2VspZ0722デフォルトの名無しさん
2015/03/14(土) 14:12:26.09ID:VDfRGL410723デフォルトの名無しさん
2015/03/14(土) 14:45:54.25ID:6mV+XECP0724デフォルトの名無しさん
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あなたの会社の規模によるとおもう。
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:YK5dNgNX0730デフォルトの名無しさん
2015/03/15(日) 01:00:10.65ID:Oue+f2XFcolorindexを変更しまくっているため、既定値とは大きく違ってしまっています。
0731デフォルトの名無しさん
2015/03/15(日) 03:56:42.56ID:Nu00PGZtColorIndexで設定した後にColorで取り出せばいいんじゃね。
0732デフォルトの名無しさん
2015/03/15(日) 22:48:16.06ID:Oto6pkxvありがとうございます。
colorって設定ばかりだったから、読めることを思いつきませんでした。
0733デフォルトの名無しさん
2015/03/16(月) 19:39:17.63ID:tk5ie8LU0734デフォルトの名無しさん
2015/03/16(月) 21:32:02.14ID:3ZODMEseその場合、文字列の中身は確定していないものとして、配列サイズは動的に変更できますか?
0735デフォルトの名無しさん
2015/03/17(火) 01:34:13.86ID:Vi/eJRXz配列に格納してくれる
str = "A,B,C"
ary = str.split(/,/)
0736デフォルトの名無しさん
2015/03/17(火) 02:35:49.91ID:/aRClwjbstr ←分割したい「,」入りの変数
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実装調べるならまあそうだろうけど
ドキュメントにないプロパティとかでてもなぁ、という事もある
>>734
Split関数
0738デフォルトの名無しさん
2015/03/17(火) 17:20:47.84ID:t2kdwNkIVBAで組もうと思ったのですが、いかんせん高校の情報で習った知識しかなく、自分で組んだところ、
データ検索を押すと無限ループに陥ってしまい、うまくいきません。
初歩的な質問で申し訳ないのですがこのVBAを組む足がかりを教えていただけませんか?
0739デフォルトの名無しさん
2015/03/17(火) 18:25:04.03ID:vCwecCoLダウンロードしてみたけど、コードが無いんだが。
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ご指摘ありがとうございます。前回作ったやつが強制終了でデータが消えてしまったようです。
740の意見を参考にしたいと思います。
Ifを使って、名前と競技結果が一致したら出力sheetに出力という関数を自前でやってみたのですが、
別々のsheetにあるものを同時に出力させる技術がなく、わけのわからないコードになってしまって、Loopした覚えがあります。
もう少しコンパクトにいける技術はあるのでしょうか?
0742デフォルトの名無しさん
2015/03/18(水) 11:21:30.00ID:OporZNyHExcel2013ってなんかエラー含みな気がするなぁ。
0743デフォルトの名無しさん
2015/03/18(水) 13:02:18.09ID:BjLPqBwu0744デフォルトの名無しさん
2015/03/18(水) 16:58:02.44ID:wrJQV04f俺だけかと思ってた
0745デフォルトの名無しさん
2015/03/18(水) 17:45:23.15ID:lQVpCBZN0746デフォルトの名無しさん
2015/03/18(水) 19:15:40.13ID:eDH0ZGAYマルチスレッドならイケるんじゃね
0747デフォルトの名無しさん
2015/03/18(水) 19:34:48.73ID:wrJQV04f0748デフォルトの名無しさん
2015/03/18(水) 23:55:16.37ID:ga8Jk3h70749デフォルトの名無しさん
2015/03/19(木) 12:35:13.54ID:7c4CnP4Hそれ知ったところでエクセルの外からは使えんと思うぞ
何がしたいねん?
0750デフォルトの名無しさん
2015/03/19(木) 15:43:57.39ID:1I3TwXi1@2次元配列(100×4のinteger型)の2番目列の最大値を出すには総当たりしかないですか?
Aa、b、cという3つの変数に一括で同じ数値を入れる方法ありますか?
よろしくお願いします。
0751デフォルトの名無しさん
2015/03/19(木) 16:28:51.44ID:VVf+EvQX1:しかない
2:ない
0752デフォルトの名無しさん
2015/03/19(木) 16:55:23.35ID:1I3TwXi1ありがとうございました
0753デフォルトの名無しさん
2015/03/19(木) 17:33:29.58ID:76Yv278k1.max関数
0754デフォルトの名無しさん
2015/03/19(木) 20:09:37.07ID:ygDVwDTUmax関数に引数を一気に入れる方法がない以上、総当たりだろ。
0755デフォルトの名無しさん
2015/03/19(木) 20:20:15.65ID:DWTmmRVlSet 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仕組みがしりたい
0758デフォルトの名無しさん
2015/03/19(木) 21:23:50.49ID:DWTmmRVl俺も今日、ちょうどそういう問題に当たってネットで調べたりしながら試行錯誤してたけど、
結局は廃棄可能なワークシートを使うのが一番簡単だという結論にたどり着いた。
エクセルVBAはそこまで親切なシステムしてない。
というかシートなら少なくとも三次元配列までは表現できるから配列内を自由に弄りたければArrayはシートで表現する方が効率的。
ちなみに「エクセルが足かせになるなら、もうVBS使っちゃえばいいんじゃね?」という方向もある。
0759デフォルトの名無しさん
2015/03/19(木) 21:34:06.05ID:B57QaUqnワークシート使うと処理速度が落ちるので避けたかったんです。
けっきょく総当たりに落ち着きました。
0760デフォルトの名無しさん
2015/03/19(木) 21:59:12.43ID:d+3glag/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:i95v39FG0762デフォルトの名無しさん
2015/03/19(木) 22:01:31.59ID:d+3glag/閉じかっこ修正
0763デフォルトの名無しさん
2015/03/19(木) 22:01:34.03ID:gLg2znKB>Arrayはシートで表現する方が効率的。
とはどういう意味?
Arrayのままで十分効率的に扱えると思うけど。
それともループ処理が大嫌いとか?
0764デフォルトの名無しさん
2015/03/19(木) 22:52:50.19ID:DWTmmRVl「自由に弄りたいなら」という前提が何故抜けた。
一次元配列の操作で事足りる様な単純な処理ならまだしも
複数列に複数条件のフィルタかけて全ての情報を目的別に振り分けるみたいな複雑な処理の状況の場合はシートの方が効率いいんだよ。
だいたいエクセルで弄る事が前提になっている以上は配列の内容だってセルのどっかに記録されている状況の方が多いわけで、
わざわざ配列に値を入れるくらいならcopyしてシート上で扱う方が処理も速いし自由度が高い。
そりゃArrayのままで効率的に処理出来る条件下だけで語るなら「Arrayのままで十分効率がいい」んだろうけどさ。
0765デフォルトの名無しさん
2015/03/19(木) 22:58:28.78ID:gLg2znKB人それぞれとしか言いようがないわな。
■ このスレッドは過去ログ倉庫に格納されています