[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 10/24 21:30 / Filesize : 261 KB / Number-of Response : 870
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part8



1 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:16:33 ]
ExcelのVBAに関する質問スレです

前スレ pc11.2ch.net/test/read.cgi/tech/1212587819/

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

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

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

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

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

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

692 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 01:54:25 ]
学習が下手な奴ほど早く学習する事が1つだけある
それは「人に訊いた方がラクだ」という事だ
なんちてw

>>687
一般的なやり方じゃないかも知らんが一応これで行けそう

重複行込み
rcnt = selection.entirerow.cells.count / activesheet.columns.count
重複行抜き
rcnt = intersect(selection.entirerow,columns(1)).count

693 名前:デフォルトの名無しさん [2008/10/29(水) 02:45:55 ]
ループの中で =average() の引数を可変的に指定する方法を教えてください
具体例:
(1)乱数で10個のデータを生成し,列方向に保存
(2)保存したデータから平均を計算し, 2つ下のセルに出力
(3)上記(1)から(2) を n回繰り返す(とりあえずn=3).

上記(2)がうまく計算できません(下から3行目のコード).

---------------
Sub dice_siml01()
Cells.Clear

Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim nobs As Integer

Cells(1, 1) = "試行回数"
n = 3
nobs = 10
For j = 1 To n
For i = 1 To nobs
Cells(i + 1, j + 1).Formula = "=randbetween(1,6)"
Next
Cells(nobs + 3, j + 1).Formula = "=Average(Range(Cells(2, j+1), Cells(2+nobs-1, j+1)))" Next
End Sub
---------------
【注】
randbetween(1,6) エラーの場合 rand()で置き換えてお願いします.

694 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 03:31:17 ]
>>693
.formula に入れるのはセルにそのまま打ち込める式
範囲指定のところが "B2:B11" とかの形式になるように、
文字列を生成すればOK

695 名前:デフォルトの名無しさん [2008/10/29(水) 09:46:54 ]
>>694
どうもありがと。
できれば、具体的な変換方法もお願いします。


696 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:03:37 ]
>>695
宿題か何か?
デカい誤り指摘してヒントも出したんだから、
そこからもっぺん自分で考えてみような
じゃなきゃこんな練習問題やってる意味ないだろ

697 名前:687 mailto:sage [2008/10/29(水) 10:09:55 ]
>>688
>>692
有難うございます。

「聞くは一時の恥じ...」
なんちてw

セル情報はExcelの基本関数知ってればコード記述で殆ど解決しちゃう
けど速度やメンテを考えるとコードは単純な程良い。


698 名前:デフォルトの名無しさん [2008/10/29(水) 10:36:40 ]
>>696
これ以上は分からん。

699 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:37:47 ]
>>697
あ、速度考えるなら intersect とか濫用しない方がいいよ
10万回ループさせると>>692より>>687の方が早いんで

700 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:16:46 ]
>>697
>けど速度やメンテを考えるとコードは単純な程良い。
これは少し間違ってる気がする
速度を考えるなら処理するデータを単純にした上でコードも単純なものにする
例えばセルのプロパティを変数に入れるとか
さらにメモリの使い方にも気を配れればいい
書くと短くても動かすと重たい処理なんてたくさんあるし



701 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:48:37 ]
コードの見た目(行数、文字数とか)が単純なのと、
実際の処理が単純なのは違うよね

あと>>699の自己フォローなんだけど、
selectionの状態に依存するわな、、、w
areasが2-3ぐらいなら>>687の方が早いってことで

702 名前:デフォルトの名無しさん [2008/10/29(水) 21:27:30 ]
置換に関しての質問なのですが、

検索した2つ右のセルの文字の最後に1をつけたい場合どうすればいいでしょうか?

703 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:39:33 ]
hoge = "あくまで一例"
set piyo = cells.find(hoge).offset(0,2)
piyo.value = piyo.value & "1"


704 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:57:52 ]
【1 OSの種類         .】 WindowsXP
【2 Excelのバージョン   】 Excel2007
【3 VBAが使えるか    .】 超初心者です
【4 VBAでの回答の可否】 VBAでお願いします。

行の挿入、削除を教えてください。

A B A B C A B C
1 1001 1001 1 1001 1001 1001 1 1001 1001 1001
2 1003 1003 2 1003 1003 1002 2 1002
3 1004 1004 3 1004 1004 1003 3 1003 1003 1003
4 1005 1005 → 4 1005 1005 1004 → 4 1004 1004 1004
5 1006 1006 5 1006 1006 1006 5 1006 1006 1006
6 1007 1007 6 1007 1007 1007 6 1007 1007 1007
7 1008 1008 7 1008 1008 1008 7 1008 1008 1008


@ AB列の数字は同じものが入っています。
A C列に数値が入ります。
B C列に合わせて、A列、B列を挿入、削除したいです。
  C列には1002がありますが、A,B列には1002が無いため、A,B列に行の挿入が行われ、次にC列に1005が無いため、A,B列の1005は
  行の削除がされると言う具合です。

業務の効率化を図りたいので、申し訳ございませんがどなたか宜しくお願いいたします。


705 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:01:22 ]
丸投げはやめようぜ。

自分で作ってみたけど、分からない所が出てきた。とかなら全然かまわないんだけど。
作成依頼所じゃないんで。

706 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:03:28 ]
すいません、数値がずれまくりました。
もう一度書き込ませてください。

【1 OSの種類         .】 WindowsXP
【2 Excelのバージョン   】 Excel2007
【3 VBAが使えるか    .】 超初心者です
【4 VBAでの回答の可否】 VBAでお願いします。

行の挿入、削除を教えてください。

@            A                 B    
    A    B         A    B    C        A    B    C
1  1001  1001     1  1001  1001  1001    1  1001  1001  1001
2  1003  1003     2  1003  1003  1002    2  1002
3  1004  1004     3  1004  1004  1003    3  1003  1003  1003
4  1005  1005  →  4  1005  1005  1004  → 4  1004  1004  1004
5  1006  1006     5  1006  1006  1006    5  1006  1006  1006
6  1007  1007     6  1007  1007  1007    6  1007  1007  1007
7  1008  1008     7  1008  1008  1008    7  1008  1008  1008


@ AB列の数字は同じものが入っています。
A C列に数値が入ります。
B C列に合わせて、A列、B列を挿入、削除したいです。
  C列には1002がありますが、A,B列には1002が無いため、A,B列に行の挿入が行われ、次にC列に1005が無いため、A,B列の1005は
  行の削除がされると言う具合です。

業務の効率化を図りたいので、申し訳ございませんがどなたか宜しくお願いいたします。


707 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:05:26 ]
>>706
>705

708 名前:デフォルトの名無しさん [2008/10/29(水) 22:22:44 ]
>>703さん

ありがとうございます!!

A列全部で検索かけたい場合どうすればいいでしょうか?

709 名前:704 706 mailto:sage [2008/10/29(水) 22:27:40 ]
申し訳ございませんでした。

EXCEL総合相談所で聞いてきます。
マルチになってしまいますが、ご了承ください。

レベルが上がったらこのスレに来たいと思います。


710 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 12:42:39 ]
>>708
2003だとFindのヘルプにちょうどいい例が載ってるんだが2007では載ってないのか?



711 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 12:45:03 ]
他のレスと混同してた・・・


712 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 21:03:32 ]
>>708
cells はセル全部
columns(1) は1列目

ヒントはここまで。

713 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 03:25:08 ]
>>706
ズリネタとして結構面白かった

714 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:00:44 ]
dim rg as range
rg=activecell
処理
この処理後に、元のアクティブセルに戻る文が書けません。
どんなだったか、教えて。


715 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:07:50 ]
もう一個、よろしく。
処理の中で範囲を指定してコピー、貼付をしている。
application.screenupdating=false を直前に入れても
画面が動くのですが、画面が動かないようにできませんか?


716 名前:y mailto:sage [2008/11/02(日) 18:36:29 ]
>>714
rg.Parent.Activate
rg.Avtivate
ついでに言うと、>714の2行目は構文ミスでエラーになるので修正が必要です。

>>715
CopyメソッドのDestinationプロパティに貼り付け先範囲を指定して、
一度にコピー・貼り付けを行うと、動く枠線が出ないようになります。



717 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:37:54 ]
>>716
久しぶりなので、マクロの記録で、終わってましたorz
おかげで、思い出すことが出来ました。
サンクス。

718 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:51:29 ]
>>716
その2行目も・・・

719 名前:デフォルトの名無しさん [2008/11/02(日) 20:57:01 ]
プログラム用のVBAコードを記述した非表示ブックから、データ用の任意のブック
を開き、データブックのイベントに対する処理をしています。
Excel2007はウインドウのタイトル右端の×ボタンが「閉じる」に対応している様
です。
Excel2007でも以前のバージョンと同様に「Excelの終了」にする方法を模索中です。
方法をご教授頂けると有難いです。

720 名前:y mailto:sage [2008/11/02(日) 22:45:44 ]
>>718
うは ご指摘ありがとうございます。

>>719
×ボタンでBeforeCloseイベントが発生するので、
同イベントプロシージャ内に
Application.Quit
を記述します。




721 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:00:30 ]
range型変数にsetしてないってのは突っ込んじゃいけない所?
最近、微妙な空気が読めなくなってきたよ・・・。

722 名前:719 [2008/11/02(日) 23:24:17 ]
>>720
自分もそれでExcelが終了すると思っていたのですが、ブックが閉じるだけです。

SnendKeys(Alt+F4)を試したら終了できました。orz

723 名前:719 [2008/11/03(月) 00:23:33 ]
訂正です。
SendKeys(Alt+F4)でもだめでした。

プログラムブック(A)からデータブック(B)を開いて、Bが変更された場合に
変更を保存するかどうかを確認するダイアログが表示されるので、Alt+F4
を送信するとダイアログが閉じられる事になるのでExcelを終了できません。

724 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:25:16 ]
>>722
application.quit の前にワークブックの close やってる?
後にしてみたらどうなる?2007はわからんけど、、、

725 名前:722 [2008/11/03(月) 00:44:26 ]
>>724
もう少し具体的に教えて下さいませんか。

2007以外は×ボタンでExcel終了が終了するようになっています。
同じブックを2007の互換モードで動かして×ボタンでExcelを終了
したいのです。
この方法が分からないのです。

726 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:21:12 ]
>>725
あ、ごめん
ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_060.html
この辺の問題のことだったの。
2007以外ではいけてるなら関係ないね。失礼した

727 名前:y mailto:sage [2008/11/03(月) 07:57:50 ]
>>725
2007で試さずに>720を答えてました。2007ではQuitだとうまくいかないんですね?
一応、Shift を押しながら×クリックすれば一発で終了するので、それで用が済むなら。
VBAでのやり方は、後で職場の2007で探してみます。


728 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 09:09:42 ]
range型ってsetしなくても使えるの?

729 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:14:59 ]
範囲指定をしてコピー等をした後、コピーモードををフォルスにした
後のことです。
範囲指定を解除する方法は、どこかのセルをactivateやselectするしか
方法はありませんか。画面のちらつきを少しでも防止したいので、セル指定を
したくないのですが、何か方法が無いでしょうか?



730 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:51:57 ]
久々にExcelのVBA触って改めて思ったけど、本当にVBAっていうかVBって糞言語だな。

>>725
724は具体的に言ってるでしょ。
ダイアログが出るために終了できないのならダイアログが出ないようにすれば?
どうしてダイアログが出るの?
ブックが変更されてるのに保存されてないからでしょ?
だったら保存したら?
こんなのパソコン初めて一週間のオッサンでも最初に覚えることの一つじゃないか。

>>729
全体的に何がいいたいのかよくわからない気がする。



731 名前:デフォルトの名無しさん [2008/11/03(月) 10:54:12 ]
どうしてもわからないので
教えていただきたいのですが、

Book1を起動して
Book1のマクロで
Book2を開くことはできたのですが

Book2の内容をコピーして
Book1に貼り付けすることができません

よろしくお願いします。



732 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:59:28 ]
>>729
ググってもすぐ見つかるし
マクロの記録でもすぐ解るようなことを何故聞く?
そのものズバリの解除法が簡単に見つかるのに

>>731
Bool2を開くと、戻り値としてBool2のオブジェクトが返る
あとは好きなようにコピーなりなんなりすれば良い

733 名前:725 [2008/11/03(月) 11:12:00 ]
>>730
保存するかどうかはユーザーが決める事で、プログラム側で決められる
のは、×ボタンが押されたらWindows2007以外と同様な動作なんだけど。
説明不足?それとも...

734 名前:725 [2008/11/03(月) 11:17:49 ]
>>730
719に記述した通りなんだけど...

735 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 11:25:31 ]
>>734
だから?
ついでに言えば、お前さんの言っている現象はExcel2007に特有の現象でもなんでもないはずだ。
お前さんが検証もせずそう思い込んでいるだけにすぎない。

全く同じ条件であれば、2003以前のエクセルでも全く同じことが起こるはずだよ。

736 名前:デフォルトの名無しさん [2008/11/03(月) 11:43:21 ]
>>735
確かに、Excel2000と2007で同じブックを動作した検証で違いが出た
だけですが...

737 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 14:48:40 ]
API

738 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:06:15 ]
もしかして、.saved や displayalerts の値はいじらずに、
組み込みダイアログをそのまま使ってるのかな?>>733
組み込みダイアログ出た後の動作が 2007 とその他で異なる可能性あるし、
ユーザに選ばせるなら自前でやった方が確実かも

739 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:23:48 ]
>665
たとえば、セル(4, 3)に '=A1+A2が記入してあり
その式をセル(5, 1)に書き込む場合
  Cells(5, 1) = Mid$(Cells(4, 3), 1)
でどうでしょう?

740 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:33:08 ]
いつの話だよ



741 名前:デフォルトの名無しさん [2008/11/05(水) 10:16:29 ]
? ActiveSheet.UsedRange.Rows.Count
これを実行後するとワークシート上のUndo(元に戻す)が無効になっていまいます。
これって、仕様ですか?

742 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 11:06:19 ]
>>741
イミディエイトウィンドウでやるとVBA動かしたの時と同じでUndoできなくなる
?1+1とかでも同じ
でもウォッチ式として使えば問題ない

743 名前:742 mailto:sage [2008/11/05(水) 11:11:33 ]
今試したらウォッチ式でもだめだった orz

744 名前:741 [2008/11/05(水) 15:12:16 ]
セルの選択範囲が変更になったとき、最終行を調べたいのですが
? ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
だと、保護されたシートの時エラーになってしまう。
他にUndoを生かしたまま最終行を求める方法あります?

745 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:17:36 ]
>>744
?WorksheetFunction.Max(ActiveSheet.Cells(65536, 1).End(xlUp).Row,ActiveSheet.Cells(65536, 2).End(xlUp).Row,ActiveSheet.Cells(65536, 3).End(xlUp).Row)
もしくは
Dim lg(2) As Long
lg(0) = ActiveSheet.Cells(65536, 1).End(xlUp).Row
lg(1) = ActiveSheet.Cells(65536, 2).End(xlUp).Row
lg(2) = ActiveSheet.Cells(65536, 3).End(xlUp).Row
Debug.Print WorksheetFunction.Max(lg())
でどう?

746 名前:デフォルトの名無しさん [2008/11/05(水) 16:42:43 ]
>>745
有難うございます。
? activesheet.cells(activesheet.cells.rows.count,1).end(xlup).row
で出来たのですが、列を特定しないと駄目なのですよね。

自分も気付いたのですが、
保護されているかどうかでUsedRangeとSpecialCellsを使い分けるという方法
もありますね。

747 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:26:47 ]
超初心者なのですが、グラフ作成のところで詰まってしまいました。
B2を起点とするデータ
B21を起点とするデータ
この二つのデータのグラフを作成しようと以下のマクロを作ったのですが、
Set muSouce2 = Range("B21").CurrentRegion
のところでエラーがでてしまいました。
この場合どうすればエラーが取れるのでしょうか?



Sub Graph1()
Dim mySouce As Range
Set mySouce = Range("B2").CurrentRegion
Charts.Add
ActiveChart.SetSourceData Source:=mySouce, PlotBy:=xlColumns
ActiveChart.ChartType = xlLine

Dim mySouce2 As Range
Set mySouce2 = Range("B21").CurrentRegion
Charts.Add
ActiveChart.SetSourceData Source:=mySouce2, PlotBy:=xlColumns
ActiveChart.ChartType = xlLine
End Sub

748 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:13:25 ]
>>747
set mySouce = の時は、データの入ってるワークシートが
アクティブになっててその書き方で行けるんだけど、
set mySouce2 = の時は先に作ったグラフシートがアクティブになってるから、
range("B21") がどこにあるのかわからんってさ

749 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:51:43 ]
>>748
なるほど!!明快な説明ありがとうございます。
つまり、set mySouce2 = の前に、
データが格納されているシートをセレクトすればよかったのですね。

対処だけでなく原因が分かりためになりました!

750 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:11:14 ]
>>749
そそ、それでOK。加えるなら、せっかく range型変数を2つ用意してるんだから、
最初にまとめて下準備しちゃえば効率がいいよね
selectせずに rangeを取得するやり方もあるけど、少しずつ覚えればいい



751 名前:デフォルトの名無しさん [2008/11/06(木) 18:01:30 ]
ある値xをアクティブセルの持つ書式に変換した値を取得したいのですが
Dim rng as Range
Set rng = ActiveCell
rng.Value = x
この方法だとアクティブセルの値が変更される為変更前の値の保持が必要になります。
もう少しましな方法を教えて頂けるとありがたいです。

752 名前:デフォルトの名無しさん [2008/11/06(木) 18:14:58 ]
>>751
Format(x, ActiveCell.NumberFormatLocal)
セルの書式によってはバグるかも試練がw


753 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:35:33 ]
そうなんです
[G/標準]とかでエラーになる為、セル代入を考えたのですが...

754 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:50:58 ]
「セルの書式に合わせた文字列に変換」でいいのね
? worksheetfunction.text(x, iif(activecell.numberformatlocal="G/標準","General",activecell.numberformatlocal))
とかは?

755 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:12:31 ]
TEXT関数か・・・ならば
worksheetfunction.text(x, activecell.numberformat)
これでどうかな?

756 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:20:37 ]
>>755
書式に和暦や曜日が指定されてるとヘンになるよ
そういうの無視でいいならいいんだけど

757 名前:デフォルトの名無しさん [2008/11/06(木) 19:35:05 ]
しつこいようだけど、頼む。
セルについて指定無しの状態にするすることは可能ですか?
set rg = nothing とか試してみたけどだめだったorz

758 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:44:51 ]
>>757
ほんとしつこいなぁ、、、って誰?w
というか、質問の意味がわからない

>>756
自己レス
曜日は関係なかった。組み込みの日付書式で和暦を選んだ時にヘンになる

759 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:50:15 ]
>>757
以前やってみようとした事があったけど見つからなかった
本当に出来るのかどうかも不明

>>758
お前頭悪そうだな

760 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:56:56 ]
>>759
質問の仕方が悪いのに、慮って答えてやるだけが能じゃないよ



761 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:01:11 ]
質問スレで分かってて答えないのは只の無能だと思われてもしょうがない。

762 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:10:08 ]
>>761
そう思いたい奴は思えばいいよ。回答者としてのスタンスは人それぞれだろ
質問スレでいちいち他の回答者をくさすのが有能とも思わないぞ

763 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:46:09 ]
喧嘩は他所でスレ立ててやれよ
目障り

764 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:18:48 ]
自己紹介乙

765 名前:デフォルトの名無しさん [2008/11/06(木) 21:53:02 ]
>>763
おまえは引っ込んでろ!
このカス。

766 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:10:27 ]
俺も >>757 の質問がよくわからないし
つか、前に質問したなら名前欄にレス番とか入れてくれ


767 名前:569 mailto:sage [2008/11/07(金) 06:17:38 ]
フォルダの中を検索して特定のExcelファイル(○○.xls)を見つけたいのだが
フォルダを作る側が適当で(ここの部分は立場上どうしようもないです・・・)

Aフォルダ
Bフォルダ
○○.xls
というパターンもあれば
Aフォルダ/Cフォルダ/○○.xls
Bフォルダ/○○.xls
というパターンもあり、○○.xlsが無いことも2個あることも5個あることもある。ただ幸い○○.xlsの名前は固定です。
このフォルダ内から存在する全ての○○.xlsを開いて中身から数字を
取り出す機能を持ったVBAを作ろうとしています。

フォルダのパスはFOを使って配列に入れてそれを
全てのフォルダパターンを使って○○.xlsを探そうとしています。
そこで質問なんですがVBAで再帰的な処理ってできるんでしょうか?

階層固定のフォルダ抽出、Excelファイルは問題ないのですが
階層実固定のフォルダ抽出で詰まっています。

例えば手抜きですが↓みたいな流れでうまく出来そうですかね?
Private Sub AAA()
今のパスを配列に格納
  if フォルダが有る時 then
call AAA
end if
End AAA


768 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 06:18:18 ]
すんません。上のやつ>>569さんじゃないです・・・。名前に入っちゃいました。

769 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 08:44:46 ]
>>767
>そこで質問なんですがVBAで再帰的な処理ってできるんでしょうか?
試した?
試してもいないのに質問しに来てない?

770 名前:751 [2008/11/07(金) 09:34:48 ]
>>754
>>755
>>758
ありがとうございます.orz
754さんの方法でグーですね。



771 名前:751 [2008/11/07(金) 09:47:36 ]
ついでにもう1つ教えてください。
xの値が「=AAA」とかだったりするとエラーになってしまうのですが、これを判別
するにはどうしたらよいのでしょうか?
? Application.WorksheetFunction.IsError(x)
だとエラーにならないのですが...

772 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:00:12 ]
どういうエラーでそのxが何か分からないと答えられない
セル(Range)なのか数値や文字なのか

773 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:09:03 ]
>>767
「Excel VBA 再帰」でぐぐれば見本がゾロゾロ出てくるよ

774 名前:771 [2008/11/07(金) 10:50:19 ]
入力したテキストxでAutoFilterの設定・解除をしています。
(フィールドはアクティブセルの列)
この時、xの書式をアクティブセルの書式への変換は
>>751
さんに教えて頂き実現できましたが、テキストがエラーかどうかの判定に
Set rng = ActiveCell: rng.Value = x
if WorksheetFunction.Iserror(rng)
とすると、アクティブセルの保存が必要になってしまう為もう少しましな
方法を模索中なのです。


775 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:54:09 ]
>>769
ちょっと試せない状態だったのでとりあえず聞きました。

>>773
ありがとうございます。ぐぐり方が悪かったのかExcel VBA 再帰で入れたらちゃんと出てきました。
お騒がせしました。

776 名前:デフォルトの名無しさん [2008/11/07(金) 13:14:43 ]
初歩的な質問なんですが、
intの変数にアクティブセルのアドレスを代入していますが、一つ目の変数にしか代入できません。
二つ目の変数に別のアクティブセルを代入するとerror13が現れます。
どなたかご教授願えないでしょうか?

777 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 13:47:26 ]
>>776
アクティブセルは1つしかないはずなのに「別のアクティブセル」って何?

778 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 15:38:15 ]
>>776
Error 13は「型が一致しません。」だから
単純にint型に文字列(スペース含む)を代入しようとしてるとか?
セルが空なら0が入るし

779 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:04:36 ]
膨大な量じゃないならコード貼ってどこでエラーがでたか書いてくれよ

780 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:10:46 ]
>>774
x = "=AAA" の時に、Criteria1:="=" & x でオートフィルタかけてもエラー出ないよ?
いつどこで出るエラーのことを言ってるんだ?具体的にコード貼ってくれないかな



781 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:27:19 ]
説明が下手な奴大杉

782 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 19:31:54 ]
説明もまともに出来ない不出来な頭だから、問題も自分で解決できずにここに質問に来るんだよ

もちろん、本当に難易度の高いことをやっていて、行き詰まって来る奴も居ないわけではないが
殆どが能無しどころか脳無し(調べる考えるという知能的行為そのものが出来ない奴)なんだから
ここに居座る(質問者としてではなく)ならそのことは覚悟しなくちゃならない

783 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 19:45:31 ]
>>782
よく分からない論理だな。

784 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:12:21 ]
わからんではないが、そこまで言い放つことでもない
甘え放題も困るが委縮させ過ぎるのもよくない
意味不明な質問を差し戻したり、時々愚痴るぐらいで丁度いい

785 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:17:57 ]
ヒマだからスレ読み返してたらわかったw
>>757=>>729だね。たぶん>>715も同じ人っぽい

screenupdating = false をやっててもちらつくのは、おそらく on / off のタイミングが悪い
たびたび on / off すると、on になった一瞬のスキも見逃さずに画面更新するからちらつく
off にしたらしっぱなしになる位置でやらないと

範囲指定を解除(セルが select されていない状態に)する方法だけど、
高さ・幅 0のイメージを用意してそれを select すれば、
selection が range でない状態にすることはできる
activecell の参照は直前のまま保持されるけど、シート上の囲み枠は出ない

でもさ、解除ができても、指定/解除を繰り返せばどのみちチラチラするよ
ちらつき防止なら、screenupdating のタイミングを確認するのがいいと思う

786 名前:デフォルトの名無しさん [2008/11/08(土) 17:49:36 ]
>>785
ベリー、ベリー、サンクス
お見込みのとおり、その3つは折れです。
展望が開けました。
サンクス。


787 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 08:43:30 ]
Enumとして宣言さている列挙型のmember名をStringとして取得できますか?

788 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:32:30 ]
販売管理ソフトから吐き出されるxlsを、マクロで変換して会計ソフト用のcsvに変換するマクロ作った。

・マクロが記述されたBook1.xlsのA1に読みたいxlsのファイル名を記述
・実行ボタンを押す
・書き込まれたファイル名のファイルを開いて、同じファイル名のcsvを書き出す


789 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:34:07 ]
だれのための、どういう報告なの?

790 名前:788 mailto:sage [2008/11/09(日) 11:36:43 ]
販売管理ソフトから吐き出されるxlsを、マクロで変換して会計ソフト用のcsvに変換するマクロ作った。

・マクロが記述されたBook1.xlsのA1に読みたいxlsのファイル名を記述
・実行ボタンを押す
・書き込まれたファイル名のファイルを開いて、同じファイル名のcsvを書き出す

そんなマクロなんだけど、毎日販売管理ソフトから吐き出されたxlsファイルをBook1.xlsと同じ階層にコピーして、ファイル名を記述しないといけないのだけど、
xlsファイルをxlsファイルにドラッグアンドドロップとかでファイル名を取得して実行できるようにする方法ってありますかね?



791 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:53:23 ]
>>787
スレ違い
それはVBAではなくVB言語の質問だ

>>790
あるけど、それはWindowsの設定の問題だ

792 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:30:57 ]
windows弄ったら出来るのかー。

ほんと言うとVisualStudioでEXE形式にできたらいいんだけどね。

VisualStudioからEXCELのコントロールわからんしな;;






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<261KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef