1 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 19:07:54 ] ExcelのVBAに関する質問スレです 前スレ pc12.2ch.net/test/read.cgi/tech/1241885130/ ★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)
150 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:44:08 ] vbaが体系的に勉強できるサイトや本でおすすめあれば教えてください。
151 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:48:49 ] >>150 ここでROMがお奨め(;゚д゚)ァ
152 名前:デフォルトの名無しさん [2009/07/25(土) 13:27:13 ] 項目1, 項目2, 項目3, 項目4, 項目n・・・(最大:n=255) あああ, ううう, えええ, くくく, ・・・ いいい, , おおお, けけけ, ・・・ , , かかか, , ・・・ , , ききき, , ・・・ (最大:行=65535) とあった場合、 項目1, 項目2, 項目3, 項目4・・・ あああ, ううう, えええ, くくく いいい, ううう, おおお, くくく あああ, ううう, かかか, くくく いいい, ううう, ききき, くくく あああ, ううう, えええ, けけけ いいい, ううう, おおお, けけけ あああ, ううう, かかか, けけけ いいい, ううう, ききき, けけけ ・ ・ ・ のように、データを詰めて別のシートの同じ位置(例:A1)から出力したいです。 ※行・列は可変データです。
153 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:29:47 ] >>150 151もおすすめだけど「体系的」ではないわなw 確かスレ違いだったと思うから紹介はしないが適当にググればいくつか出てくるからサイトさがしはそんなに難しくない 本買うなら最初はあまり分厚いのでなくて初心者向けの簡単な入門書やってみれば 自分が身につけたいことが見えてきて次に本買うときは自分の好みに合った本選びできる
154 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:37:24 ] >150 excel vba 入門 に一致する日本語のページ 約 183,000 件中 1 - 10 件目 (0.35 秒)
155 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:39:59 ] >>152 これって 丸投げというか、依頼じゃね 何がわからないか書かないと答えられないだろ
156 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:45:47 ] >>152 nhngdおk
157 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:59:52 ] >152 この例だとfor〜nextループ4重で行数は2×1×4×2=16行。 組み合わせの問題で項目数が不定ということは再帰処理ができるとわかりやすいんだろうけど・・・・ 「excel vba 再帰」でググったら再帰プログラムができるらしい。 ひとつ間違えると無限ループになるし、項目数最大256個が大丈夫なのか、やってみないと なんともいえない。
158 名前:157 mailto:sage [2009/07/25(土) 17:28:56 ] >152 行基準(再帰処理)でやろうとしたら、こんがらがってしまい中断。列基準だとなんかできそう。 先に列数(4)と、列毎の行数を調べ、配列に設定。この際添え字は0〜列数+1とし、 配列(0)と配列(列数+1)の内容は1にしておく。 その結果、配列(0)=1、配列(1)=2、配列(2)=1、配列(3)=4、配列(4)=2、配列(5)=1 となる。 左端列(A列:列番号1)は当該列の要素("あああ"、"いいい"の2種類をそれぞれ左側の組み合 わせ数1回繰り返したものを右側の組み合わせ数(1×4×2=)8回出力する。 →あああ、いいい を8回 B列(列番号2)は当該列の要素("ううう")の1種類をそれぞれ左側の組み合わせ数2回繰り返した ものを、右側の組み合わせ数(1×4×2=)8回出力する。 →ううう、ううう を8回 C列(列番号3)は当該列の要素("えええ"、"おおお"、"かかか"、"ききき")の4種類をそれぞれ 左側の組み合わせ数2回繰り返したものを、右側の組み合わせ数2回出力する。 →(えええ を2回、おおお を2回、かかか を2回、ききき を2回)を2回 D列(列番号4)は当該列の要素("くくく"、"けけけ")の2種類をそれぞれ左側の組み合わせ数 8回繰り返したものを、右側の組み合わせ数1回出力する。 →くくく を8回、けけけ を8回 列数がNで、n列目の出力を考えた場合、 要素数は 配列(n) 左側の組み合わせ数は 配列(0)×配列(1)×・・・×配列(n−1) A列の場合も配列(0)=1があるので計算に支障なし 右側の組み合わせ数は 配列(n+1)×・・・配列(N−1)×配列(N) 最右列の場合も配列(N+1)=1があるので計算に支障なし
159 名前:157 mailto:sage [2009/07/25(土) 17:35:38 ] >158の続き >152の例だと「項目3」が えええ、おおお、かかか、ききき、えええ、・・・という 順番だけど、えええ、えええ、おおお、おおお、かかか、かかか、ききき、ききき・・・の 並びの方が組み合わせ順としては自然だと思う。項目4も同様に同じものが8回ずつ繰り返す ことになります。 >152 ここまで示したらできますか?
160 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:55:00 ] よくわからないけど、列ごとにソートしたいのか? 格納用の配列(65534、254)を用意 ソート用の配列(65534、0)を用意 列をカウントする変数iを用意 for i=0to254 ソート用の配列に列データを格納、ソート 格納用の配列(65534、i)にソートしたデータを格納 最後にシートに格納した配列を流し込む
161 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:12:03 ] >>152 死ぬほど遅いけどこういうことか? Sub test() For Each c In Range(Cells(1, 1), Cells(65535, 255)) If (c.Value = Empty And c.Rows > 1) Then c.Value = c.Offset(-1, 0).Value End If Next End Sub
162 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:10:28 ] >>152 1.まず、項目1...nの要素を数える 2.数えた要素を掛け算、K1xK2x...xKn 3.2.で得られた数値が必要な行数なので、 各項目ごとに各要素で必要行数だけ埋める
163 名前:162 mailto:sage [2009/07/25(土) 21:13:15 ] すまそ 2.数えた要素の、最小公倍数を求める
164 名前:162 mailto:sage [2009/07/25(土) 21:16:14 ] すまそ だれか、2.の正解を頼む
165 名前:162 mailto:sage [2009/07/25(土) 21:18:27 ] ああ、最初の162で正解でした
166 名前:162 mailto:sage [2009/07/25(土) 21:22:58 ] >>152 の質問で あああ, ううう, おおお, くくく の組み合わせが必要かどうかで答えが変わるね スレよごし、すまそ
167 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:54:28 ] 環境 ・WindowsVista ・Excel2002 A1〜A10の合計をC2に表示させるマクロを作りたいのですが上手くいきません。 自分で作ったのは以下の通りです。 Sub practice() Dim i As Integer For i = 1 To 10 Cells(2, 3) = Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) Next i End Sub アドバイスを頂けると助かります。 よろしくお願いします。
168 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:01:07 ] どううまく動かないか説明もせずにアドバイスとな
169 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:12:49 ] 説明不足で申し訳ありません。 上手くいかないというのは合計の値がオートSUMで計算した合計と一致しないということです。
170 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:21:21 ] やりたいことはコレか? Sub practice() Dim i As Integer Dim sum as Integer sum = 0 For i = 1 To 10 sum = sum + Cells(i, 1) Next i Cells(2, 3) = sum End Sub
171 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:26:42 ] >>167 元マクロ無視して書けばこういうこと? Sub practice() range("c2") = worksheetfunction.sum(range("a1:a10")) End Sub
172 名前:167 mailto:sage [2009/07/26(日) 01:28:41 ] >>170 値が一致しました。ありがとうございました。
173 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 03:50:40 ] どうせ小数をintegerで計算したってオチだろ
174 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 08:32:13 ] セルを各々9回余分に加算してたんだろ
175 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:25:18 ] 動かないとかエラーが出てるとか書く時はどう望んだ風に動かないとかどんなエラーメッセージが出てるとか書け と>>1 に書いたとしても、読みもしないんだろうなぁ。
176 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:33:22 ] エスパーだけどループ処理を使ってSUMさせる課題か何かだな
177 名前:デフォルトの名無しさん [2009/07/26(日) 13:48:35 ] よろしくお願いしますm(__)m Excelで店舗の営業日報を作れるデータを作成しました。 他人がそのデータを使うワケなのですが、 データに打ち込んで、上書き保存などはできるが、 データそのものを複製やコピーする事を防止する事は可能ですか? また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか? あるとすればどのような手段でデータをその人に預ければよいのでしょうか。 わかりずらいかも知れませんが よろしくお願いしますm(__)m
178 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 14:00:33 ] >>177 マルチ 芯でください
179 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:08:32 ] できる で、マルチならどこなのか晴れYO
180 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:09:31 ] 54 :名無しさん@そうだ選挙にいこう :2009/07/26(日) 13:28:31 よろしくお願いしますm(__)m Excelで店舗の営業日報を作れるデータを作成しました。 他人がそのデータを使うワケなのですが、 データに打ち込んで、上書き保存などはできるが、 データそのものを複製やコピーする事を防止する事は可能ですか? また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか? あるとすればどのような手段でデータをその人に預ければよいのでしょうか。 わかりずらいかも知れませんが よろしくお願いしますm(__)m
181 名前:デフォルトの名無しさん [2009/07/26(日) 17:25:08 ] 自分>>177 です。 マルチとは 『他でも質問してる』 って意味なのですね。 すみませんm(__)m ドコで質問すればベストか、また、 色んな人に聞けばもしかしたら、と思い書き込みしてしまいましたm(__)m ご迷惑おかけしましたm(__)m さしつかえ無ければ>>179 さん、簡単にでも教えていただけませんでしょうか? よろしくお願いしますm(__)m
182 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 17:29:37 ] ↑ 女子大生or女子高生なら、即解決w
183 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 17:53:50 ] ☆質問例☆ Excelで店舗の営業日報を作れるデータを作成しました。 他人がそのデータを使うワケなのですが、 都内の中学校にかよう15歳の女子中学中学生ですが、最近中学1年の妹の胸が大きくなってきて困ります。 まだ中学生なのに私よりも膨らみが目立っているのが少し悲しいです。 一緒にお風呂に入るとよくわかります。 妹は私の気持ちに気がつくどころか、ことあるごとにさわったりもんだりしてくるのです・・・。 データに打ち込んで、上書き保存などはできるが、 データそのものを複製やコピーする事を防止する事は可能ですか? また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか? あるとすればどのような手段でデータをその人に預ければよいのでしょうか。 今日もスポーツブラの下から手を入れてきて、声を堪えるのに大変でした。 わかりずらいかも知れませんが よろしくお願いしますm(__)m
184 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 18:13:54 ] 俺は貧乳でもOKだよ。
185 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:33:47 ] XP,OFFICE 2007 初心者&初カキコです。 いきなりすみません。 配列変数 A(3,100)があるとして、 A(2,0)〜A(2,100)や、A(3,0)〜A(3,100)といった各一次元配列の平均をそれぞれ出したいのですが、 全ての平均を出す場合は .Average(A) ですが、各次元毎だと、方法が解りません。 どなたか指導をお願いします。
186 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:48:03 ] 環境 ・WindowsVista ・Excel2007 SheetAに貼った画像の中から選択したものを一つSheetBに貼りたいんですが どうすればいいですか?
187 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:58:51 ] >186 マクロの自動記録は試してみましたか? 当方Excel2003ですが、自動記録してできたソースの1〜2行コメント化するだけで、できましたよ。
188 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:02:24 ] >185 凡人なので、for 〜 next ループで回しながら、合計と件数を調べてわり算で求める方法しか知りません。 これ以外の回答をお望み?
189 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:03:27 ] >>187 ありがとうございます やってみます
190 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:29:12 ] >188 出来るだけ早くしたくて。。 すみません。実は50×100×10000の三次元配列なので、それやると時間が半端ないんです。
191 名前:188 mailto:sage [2009/07/26(日) 23:34:11 ] >185,190 情報の後出しイクナイ
192 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:37:25 ] >>186 ですが、自動記録を使ってやってみました でもだめでした・・ Sheet2にある複数の図のうち、異なる図をコピーしても、すべて Sheets("Sheet2").Select Selection.Copy となってしまいます コピーする図を選択するにはどのようにすればいいんですか?
193 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:39:54 ] >>191 そんなの後出しじゃないだろ。 質問の内容から想定してしかるべき。
194 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:41:24 ] for 〜 nextで変数を複数設定したい場合はどうすればできますか? たとえば変数iが「5 to 101 step 24」で変数kが「5 to 20 step 5」として cells(i,k).copy selection.paste みたいな感じで動作させたいです。
195 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:47:02 ] >>191 「俺にはわからない。」と言えばいいんだよ。 >情報の後出しイクナイ なんだこりゃ?ぶさいく。
196 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:47:19 ] >191 確かに。後だしは良くないですよね。すみません。 出来るだけ簡単なシチュエーションにしたかったんです。 ところで、どなたか>185のやり方をご存知ないでしょうか?
197 名前:187 mailto:sage [2009/07/26(日) 23:59:08 ] >192 当方の手順(マクロの自動記録)シートAに図形があって選択していない状態から 1 図形をクリック 2 メニューの編集−コピー 3 シートBのタブをクリック 4 メニューの編集−貼り付け これだけです。できたソースは↓で、1行目だけ削除すればいい。 ActiveSheet.Shapes("Picture 1").Select ←これだけ削除 Selection.Copy Sheets("SheetB").Select ActiveSheet.Paste 実行する際は、マクロを呼び出す前にコピーしたい図形をクリックして選択 状態にしておくこと。シートBの貼り付け先を指定したいときは、自動記録 のときに当該セルをクリックする。
198 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 00:04:47 ] >192 196ですが、世の中ギブアンドテイクって事で、試して見てください。 Worksheets("A").shapes(i).Copy Worksheets("B").Activate Active.Sheet.Paste iの部分に画像が何枚目かを代入。
199 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 00:07:40 ] >>197 >>実行する際は、マクロを呼び出す前にコピーしたい図形をクリックして選択 状態にしておくこと。 この作業無しでする方法はないですか?
200 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 00:22:25 ] >>198 できました! みなさんありがとうございました
201 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:24:29 ] >>185 Range(Cells(1, 1), Cells(3, 100)) = a として 各行の平均を出す
202 名前:デフォルトの名無しさん [2009/07/27(月) 01:28:15 ] >>194 k = 5 For i = 5 To 101 Step 24 If k > 20 Then Exit For '↑はkのTo 20があまり重要でないならいらない Cells(i,k).Copy Selection.Paste k = k + 5 Next こんなんなったけどいいか? これだと、変数iとkがいずれかはみ出したらループを抜ける。 これだと、(i,k)=(5,5),(29,10),(53,15),(77,20)の4回ループ内を実行する。
203 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:42:17 ] >>202 ありがとうございます。 上記の方法で無事動作しました。 ちなみに変数にしたい要素が3つ以上ある場合というのは一般的にどういう処理が効率的でしょうか? 今はいちいちすべての場合分けをして記述していますが、それぞれの増減は規則性があるので なんとか簡易にしたいと思っています。
204 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:53:41 ] >>185 Sub test() Debug.Print WorksheetFunction.Average(Range("A1:A100")) Debug.Print WorksheetFunction.Average(Range("B1:B100")) Debug.Print WorksheetFunction.Average(Range("C1:C100")) End Sub
205 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:53:48 ] >201 ありがとうございます。 やはりシートを利用するしかないんでしょうね。 それか個別の一次元配列変数を宣言して代入とか。 出来れば、.Average(A(2))とかの記述でその従属二次元配列が計算されるのを期待したんですが、 特定の次元を宣言するような関数なり構文はないんですね。。 今日はもう寝ます。明日会社だし。 ありがとうございました。
206 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 10:20:03 ] >>203 「一般的」と「効率的」と「簡易」は両立が難しい。 何がやりたいのか自分でもわかってない気配がするが、まずは質問を絞れ。 ループ終了の条件が2つ以上ある時は無理にFor Nextを使わない。 Exit ForやGotoのような、プログラムの流れを強制的に変える命令は、 あまり使わない方がいい。 i = 5 k = 5 While (i <= 101) And (k <= 20) Cells(i, k) 以下略 i = i + 24 k = k + 5 Wend
207 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 10:44:58 ] 変数が大量にあって、ループの回数も多くなると、 ForとIfでもWhileでも、終了条件の判定回数が増えるから少し効率が落ちるね。 そういう時は最初にループの回数を調べしまうといい。 回数i = (101 - 5) / 24 回数k = (20 - 5) / 5 If 回数i < 回数k Then 回数 = 回数i Else 回数 = 回数k End If i = 5 k = 5 For a = 1 To 回数 Cells 以下省略 i = i + 24 k = k + 5 Next あとはケースバイケース。 可能なら、こんなふうに数式を短縮してみるとか。 For a = 0 To 回数 - 1 Cells(5 + 24 * a, 5 + 5 * a) 以下省略 Next
208 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 17:17:40 ] strTextLine = "A,B,C,D," というCSVファイルがあって、これをDataという配列変数に Data = Split(strTextLine, ",") とすると DATA[0]はA DATA[1]はB DATA[2]はC DATA[3]はD ですが DATA[5]にナルが入るんでしょうか? それとも最後のカンマは無視されるんでしょうか? 配列に入れて処理を加えた後に strTextLine = Data(0) For C = 1 To UBound(Data) strTextLine = strTextLine & "," & Data(C) Next C で戻してやると最後のカンマは生きているので、無視はされてないのではないかと思うのですが、確証が得たいので質問しました。
209 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 17:33:58 ] あれ使うといいよ イミディエイなんとか
210 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 18:53:26 ] >>208 さすがにDATA[5]には何も入らんだろう。という挙げ足は置いといて。 たとえば元のデータが"A,,,B"で長さが0の文字列が無視されてしまったらどうなると思う?
211 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 18:57:25 ] 何百行あるか何千行あるかわからないテキストファイルを一行ずつ配列に入れたいんですが LineInputを繰り返す度に毎回ReDimしながら代入するしかありませんか? なんとなくRedimを繰り返すのは処理速度的にあまりスマートではないのではという懸念があるのですが。 一度LineInputの度に変数に+1して行数を求めてから もう一度LineInputと代入を繰り返すのとどっちが良いでしょうか。
212 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 19:25:27 ] 俺なら最初に何行あるかを確認して、その分の配列をとり格納するようにすると思うけど、 スマートとかどうとか言う以前に目的を達成できたら、それで良いのでは? デバッグの容易さとか保守性の容易さとかを考慮するのは大事だと思うけど。
213 名前:デフォルトの名無しさん [2009/07/27(月) 21:51:33 ] >>208 ,209 イミディエイトウインドウのことですな。 DATA[4]なら Debug.Print DATA(4) で調べられますYo. っていうかこの場合ローカル ウィンドウで直接見たほうが早くね?
214 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:35:50 ] >>211 1行ずつ増やすんじゃなくて、たとえば100行とか200行単位で拡張していって、 最後に余った分はもう一度ReDimして削るようにすれば、だいぶ軽くなる。 行の長さの最大値とかファイルの大きさがある程度わかってれば、 もうちょっと別のアプローチもあるんだけど。
215 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:44:05 ] >>211 ファイル全体を文字列変数に一気に読み込んだあと Split関数で区切りを改行コードにして分割
216 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:35:54 ] WindowsXPのOffice2003を使用しています。 型番や製品名の一覧があり、これらが別に用意されている製品の型番などの書かれたリストと 一字一句相違ない事を確認する作業を補助するマクロを作ろうとしています。 列Aに aaa bba ccc zzz とあり、別のシートにリストがあって aaa bbb ccc ddd の様に書かれていたら、列Aのbbaとzzzがリストにないのでそのセルを着色する、と言う処理を考えています。 この様なリスト総当たり的な判定、間違い探しを行う事は可能でしょうか。 ttp://paint.s13.dxbeat.com/up/src/paint_18511.jpg 画像は処理前後のイメージです。列Cにコピーするわけではありません。 実際にはリストもデータもそれなりの量があります。 (なお、ループ処理、次の行、列、リストへの移動などは別に変数を切ってある範囲を直指定するなど力業でやってしまう予定です。) マッチングのやり方として、以下を考えています。 1.リストの先頭の文字列をデータの列Aの先頭から総なめして、次のリストの文字列へ、、の繰り返し。 2.何かしらの関数でリストを一括で読み込めて、データの列Aを上からマッチングしてくれるやり方。 2は希望ですが、何か良い手段がありましたらご教授お願いします。
217 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:42:41 ] よし!ここでVLOOKUP関数だ!
218 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:46:43 ] >216 そういう関数があるかは解りませんが、結局マッチングしなかったセルを色付けしないといけないので、 For〜Next構文を使用する事になると思いますので、1.をお勧めします。
219 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:53:48 ] >>216 作業列を1列使えばワークシート関数だけでできるんだけど、VBA使わないとだめ?
220 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:54:27 ] VLOOKUPと条件付書式を使えばできるんじゃないかな。 俺ならマクロでするけど。
221 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:58:52 ] >>216 個人的お勧めは3.フィルタオプション だけれどちょっと調べてよくわからないなら1.総ナメが堅いかな 結構な量あるとはいっても2003の行に入る分量なら よほど下手なコード書かない限りたいして時間かからない
222 名前:216 mailto:sage [2009/07/28(火) 01:13:53 ] 皆さんレスありがとうございます。 >>217 調べてみました。まさにマッチングはこれだ!と言う感じでしたが、リストの別の値を代入するのではなく 色を付けたいのでどうして良いものか… あ、何でも良いから値をマッチしたら変数に値を一旦格納して その後if文で変数を見て色塗りを振り分ける、、って感じなら出来そうですね。 >>218 はい、1も考えてみます。パフォーマンスがやや心配ですが^^; ループはいずれかの方法を使いますが、時間の関係と空のセルも多々あり得るので手を抜こうと画策中です。 >>219 実は既にデータシートに数式が入っていたりして、なるべく体裁をいじりたくないというのが一点と 列が20個ほど、列の数だけリストも存在し、行数は100〜200位なのでVBAの方が良いのかなと考えました。 >>220 はい、vlookupをちょっと調べてみます。 条件付き書式は多分勝手に組んじゃダメと言われそうなので回避する方向で考えています。 >>221 なるほど、オートフィルタの制限無しバージョンみたいな感じですね。しかもリストの範囲も指定できて出力も出来ると。 参考にさせていただきます。ただ、各ファイルで毎回設定各列を指定する必要がありそうですね。 上記データシートが一日に10〜20ファイル届いて捌かないと行けないので、もう少し自動化の道も探ってみます。
223 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 01:37:25 ] >222 218です。20*200なら配列変数に格納してMatchなりVlookUpなりで検索かける方がセルに情報を読みに行く時間が短縮出来ますよ。ほんと僅かですけど。 変数格納もRangeオブジェクト使えば一瞬ですし。
224 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 01:42:13 ] 223です。 はあ?って思われたでしょうね。 誤爆しました。223は忘れて下さい。時間は同じでした。
225 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 07:35:38 ] すいません、Excel2003なんですが質問が二つあります。 1.セルに複数行のデータがある場合、指定行だけ参照することはできますか? 2.セルに入力されたパスが読み取り専用のフォルダかどうか調べることはできますか? よろしくお願いします。
226 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 07:49:41 ] >>225 1については、セルの折り返しでなく改行入力ならば、改行をカウントして文字列抜き出す 2はFSO使えばおk
227 名前:デフォルトの名無しさん [2009/07/28(火) 10:02:18 ] Excel2003 XPです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) で渡されるTargetが連続した複数のセル範囲である場合、行を1行に 変更する処理を行いたいのですが、とりあえず力技で以下のように しています。 myRange1 = Target.Address myRange2 = myRange1 If InStr(myRange1, ":") Then myRange = Split(myRange1, "$") myRange2 = myRange(1) & myRange(2) & myRange(3) & Left(myRange(2), Len(myRange(2)) - 1) End If 要は"$"で列行列行に分割して文字列を作り直しているのですが、 何とも見難いのでもっとスマートなコマンドやテクニックは無いでしょうか? よろしくお願いします。
228 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 10:36:53 ] >>215 ありがとうございます! すばらしくスマートです。
229 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:20:58 ] >>227 とりあえず$記号をまとめて消したいなら myRange2 = Replace(Target.Address, "$", "") あと、そのプログラムにはバグがあるよ。 選択された領域が2つ以上に分かれて離れていた場合、2つ目以降がすべて消えたり $記号が残ったりする。 それよりも、セルが1個の時と複数の時を区別する意味がわかんないし、 $を消す理由もよくわからん。普通はTargetはそのまま使うもんだし。 たぶん、他の部分でもカンチガイしてる可能性が高い。 何がやりたいのか全部書いてみ?
230 名前:227 mailto:sage [2009/07/28(火) 13:27:12 ] >229 よく読んでください。 $をまとめて消したい訳ではありません。 連続領域の最上位行が対象ですので離れていようがバグりません。 >何がやりたいのか全部書いてみ? >227の通りです。
231 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 13:35:49 ] >>227 データ解析の色分けで同じようなことをやったことがありますが $を探して無理やりやった記憶があります。 今でも勉強中の身ですのでその程度の知識しかありません。 SPLITで配列に入れて結合し直すのは感心しました。 無駄レス失礼。
232 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 13:59:52 ] >>229 よく読めば>>227 さんの言ってることくらいわかるはずだろ! 二度と質問者様の手を煩わせることのないようにな! あと分かりやすく説明するんだぞ!! (・д・)
233 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 14:09:26 ] 俺の頭が悪いのかなあ 「行を1行に変更する」の意味がどうもわからん じゃあ変更する前の「1行じゃなかった行」ってどういう状態のことだろ
234 名前:22 mailto:sage [2009/07/28(火) 14:27:27 ] dim header as range set header = target.rows(1)
235 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 14:28:12 ] う、変な名前が・・・
236 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 15:42:54 ] >>233 奇遇だな、俺もわからないんだ
237 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 15:56:24 ] わからないなら書き込まないでくださいね
238 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:14:20 ] >>227 具体的な例を出してないのが悪いな 例えば$A$3:$E$6が選択されてたらどうしたいんだ?
239 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:32:41 ] >>237 そうだな、なんで解らないってレスが付いてるかも理解出来ないやつは書き込み禁止にすべきなんだよな
240 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:04:07 ] >>227 そのプログラム、Target.Addressが"$A$1,$C$3:$D$4"の時、 myRange2は"A1,C1"という結果になるんだけど、本当にこれでいいの?
241 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:13:21 ] まさかと思うけど… 1行にしたいってこういうこと? Set myRange2 = Target.Resize(1)
242 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:28:21 ] myRange2は範囲を示す文字列だから myRange2 = Replace(Target.Resize(1).Address, "$", "") じゃないか? $を消す必要があるかどうかは不明だが ちゃんと説明してもらえそうにないんで、とりあえず。
243 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:30:30 ] 実は文字列に変換する必要はなかった、に一票 たぶん>>241 で正解だと思
244 名前:227 mailto:sage [2009/07/28(火) 17:31:34 ] >233 >236 >238 現状のコードまで書いてるのに・・・ >240 そのケースは想定しておりませんでした。 ご指摘ありがとうございます。 変な流れになってますので出直します。 失礼しました。
245 名前:227 mailto:sage [2009/07/28(火) 17:36:06 ] >241 それです。 Resizeがありましたね。 ありがとうございました。
246 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:53:30 ] 現状のコードってあんた、>>240 の例にもあるように そのコードが理解不能な結果を出してんだから答えようがないじゃん ちなみにCtrl+クリックで離れたセル領域を選択すると Resizeでエラー出るよ
247 名前:227 mailto:sage [2009/07/28(火) 17:58:01 ] >246 >233,236,238の問いには充分かと思いますが? またResizeでエラーがでるのは承知しております。 >229でとんちんかんなレスをされていた方でしょうか? いずれにせよ不毛ですのでこの辺で失礼します。
248 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 18:42:48 ] >>247 ほんと変な流れになってるよね、なんでかわからないけどkkwr ちゃんとした質問kkwrだったし、口調も丁寧kkwrなのに・・・ 多分タイミングが悪かったんじゃないかな・・・また何かあったらその時はきちんとしたレスが付くといいねkkbk
249 名前:231です mailto:sage [2009/07/28(火) 20:20:23 ] そうか、RANGEのままサイズ変更できるんだ。 何で>>227 が絡まれてるか分からんけど自分の勉強になりました。
250 名前:デフォルトの名無しさん [2009/07/28(火) 21:14:36 ] OS:XP、EXCEL2003 を使っています。 こちらのコードを実行すると(0 2)、(0.1 1.9)...(1.8 0.2)、(1.9 0.1)と出力されます。 最後に出力させると思われる(2 0)が出力されません。 小数処理の関係かと思うのですが、どなたか詳しい方 解説いただきたくよろしくお願いいたします。 Sub test() Dim a As Double Dim b As Double For a = 0 To 2 Step 0.1 b = Round(2 - a, 1) Debug.Print a & vbTab & b Next End Sub
251 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 21:48:48 ] >>250 演算誤差詳しくないけれど Excelの0.1は厳密な0.1じゃないからループ21回目でfor文の終了条件の2を越えてるんじゃね?
252 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 21:52:15 ] >>250 浮動小数点の問題ね As Double を As Currency にしてみたら・・どうなるかな!
253 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:11:06 ] 四捨五入せずに For a = 0 To 2 Step 0.1 b = 2 - a Debug.Print a, b Next でやってみ。誤差が見えるよ。 あとPrintメソッドで「 , 」を使うとTabの働きをする。これ豆知識な
254 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:20:08 ] 通貨型 (Currency) 通貨型 (Currency) の変数は、64 ビット (8 バイト) の変数です。 整数形式で表され、10,000 倍されて整数として記憶された、15 桁の整数部分と 4 桁の小数部分を持つ固定小数点数です。 -922,337,203,685,477.5808 〜 922,337,203,685,477.5807 の範囲の値をとります。通貨型の型宣言文字は、アット マーク (@) です。 通貨型 (Currency) は、金額に関連する計算に役立つデータ型です。また、固定小数点を含む計算にも役立ちます。
255 名前:250 [2009/07/28(火) 23:14:54 ] >>251-254 試してみて0.1ステップだと誤差で21回目に2より 少しだけ大きな値になってしまうことが理解できました。 Printメソッドでの「 , 」も勉強になりました。 通貨型でも期待通りの動作をすることを確認できました。 こういった誤差に強い型だとわかりました。 ご回答ありがとうございました。
256 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:14:45 ] 応用は利かないけど、こうするな For a = 0 To 20 Step 1 b = ( 20 - a ) / 10
257 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:21:19 ] > あとPrintメソッドで「 , 」を使うとTabの働きをする。これ豆知識な 豆知識ではなく基礎知識じゃね? ;で区切ると結合になって、末尾に;入れると改行されないのとセットで
258 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 10:09:22 ] メインのSubで動的配列を Dim A() As String Dim B() As Long Redim A(10) Redim B(10) と宣言して別のルーチンで配列の中身をいじりたい時 ルーチンの呼び出しと呼び出し側の指定はどう書いたら良いですか? 配列操作 A(), B() private sub 配列操作(ByRef A() As String, ByRef B() As Long) な感じでしょうか、それとも 配列操作 A, B private sub 配列操作(ByRef A As String, ByRef B As Long) な感じでしょうか
259 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 11:05:06 ] >>258 配列は自動的にByRefになるので省略できます。逆にByValは指定できません。 Call 配列操作(A(), B()) Private Sub 配列操作(A() As String, B() As Long)
260 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 11:23:33 ] ()は必要なんですね、ありがとうございます。
261 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 11:50:09 ] >>259 おい、嘘つくな。
262 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 11:53:36 ] 直後にすみません、もうひとつひっかかってしまいました。 Split関数で文字列をAというVariant型の配列に格納した場合、この変数は 配列操作 A Private Sub 配列操作(A As Variant) とすれば配列を維持したままByRefで渡せるんでしょうか?
263 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 12:12:18 ] 自分で実験すれば済むことをここで聞くか?
264 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:37:55 ] 聞けばわかるのにわざわざコード組むか? なんだろ どちらも真理だ
265 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 14:31:15 ] わかったら終わりなの?結局コードは書かなくていいの? 宿題?
266 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 14:37:35 ] >聞けばわかるのにわざわざコード組むか? ただの疑問なら聞けば済むだろうが ここで出る質問のほとんどは最終的に組まないと終わらないだろ? まぁ実験の仕方がわからないって場合は仕方ないかも知れんが
267 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 15:44:29 ] 結局コード組むんだから間違ってるかも知れない面倒はやりたくないのだよ!
268 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 15:55:18 ] いきなり成功するより、いっぺん間違えた方が身に付くし 理解が深まって応用がきくようになる
269 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 16:59:34 ] それは当然 だが結果しか望まない者もいるのだよ・・・
270 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 17:18:10 ] Sub test() Dim V() As Variant ReDim V(10) V(0) = "自分で調べろ" VVV V End Sub Private Sub VVV(V As Variant) MsgBox V(0) End Sub
271 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 17:57:12 ] >>270 そのコードは冗長的だな 今後の保守のためにもこうすべき Sub test() 略 V(0) = "ググレ" 略
272 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 18:04:34 ] >>271 そのコードは冗長的だな 今後の保守のためにもこうすべき ググレ
273 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 18:37:56 ] で、このスレの存在価値も無くなりましたとさ チャンチャン
274 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 18:43:57 ] ではこういうのは Sub b() Dim myStr As String Dim myMsg As String Dim i As Long Do myStr = Mid(Rnd(), 3, 14) If myStr = "718571858269" Then Exit Do sleep 1 Loop For i = 1 To 12 Step 2 myMsg = myMsg + Chr(Mid(myStr, i, i + 1)) Next Debug.Print myMsg End Sub >273 そもそも質問するスレだしな 答えたくないなら答えなければいいだけ・・・でもある
275 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 18:55:03 ] 桁が足りないな 素直に for ri = 0 to 5 Randomize rndStr(i) = mid(rnd()3,2) next
276 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 19:55:37 ] ワークシート関数を眺めていて、気になったのですが、 countif(range,"<100") のように、第2引数が文字列型(?)のように見えます。 試しに、 dim str as string str = "<100" msgbox 10 & str '← 10<100 と計算をさせたい。= true の結果を出したい。 と組んだのですが、 結果は 10<100 と文字列で表現されるだけでした。 引数に含まれる演算子をそのまま読み込ませる方法はありますでしょうか。 なにとぞよろしくお願いします。
277 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 20:20:41 ] それをやるのはevaluate()だが、お前が本当にやりたいのはworksheetfunction()じゃないか?
278 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 20:48:18 ] str = "<100" MsgBox CBool(Val(10 & str))
279 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 20:52:22 ] つまらん
280 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 20:52:34 ] sumif関数について質問です。 検索条件を2つ指定する場合はどのようにしたらいいのでしょうか? A列にある「あ」という文字とB列にある「い」という文字があるときの C列にある数値の合計。 よろしくお願いします。
281 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 21:00:45 ] >>280 ここはvbaの質問スレだけどvbaの回答でいいのか? (なんとなくスレ違いっぽい文章に見えたので念のため確認)
282 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 22:51:02 ] >>277 いや、ワークシート関数をVBAで使うって話ではなくて、 例えば、countif だと条件2個はネストしないと出来ないので、 それを1つの関数で出来るようにユーザー定義関数を作ろうと思ったのです。 その時に、ワークシートの countif は、第2引数に文字列で条件を入れてるのに、 それをダイレクトに演算式に代入出来てる事を疑問に思いまして。
283 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 22:59:55 ] そうならそうと最初から言え馬鹿
284 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 23:00:54 ] 私の政策はブレてません。
285 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 05:32:07 ] 馬鹿ではないでしょ。読めば分かるし。 >282 Rangeオブジェクトのように、セル範囲を" "で囲んであるものも有りますよね。 これはVBAがコードをコンパイルする時に、区別しやすくするためだと思います。 なので必ず文字列として機能している訳ではないです。 最終的にはマシン語で動く訳ですから。
286 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 06:24:27 ] VBAはコンパイルはしないだろ
287 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 07:35:20 ] メニュー > デバッグ > VBAProject のコンパイル
288 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 07:41:11 ] そういう表記だとしてもコンパイルじゃないよね? コンパイルの意味わかってる?
289 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 07:42:52 ] 機械語に訳すとならったが、ちがうのか?
290 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 07:51:58 ] そうだね。 それでVBAは機械語に訳した実行ファイルを作るのかい?
291 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 07:53:31 ] VBAはコンパイラじゃなくて、インタプリタだろ?
292 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 09:02:19 ] VBAはインタプリタ言語でもあり、コンパイル言語でもある
293 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 10:04:31 ] アセンブラのほうが好みだわ
294 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 10:31:03 ] 機械語を吐くのは「狭義の」コンパイル。工業高校レベルの回答。 「Pコードマシン」でぐぐれ。
295 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 13:08:27 ] Excel2007のVBE、インテリセンスが効かないんだけど何か設定がいるの?
296 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 13:10:25 ] ああ、オブジェクトの種類によって効かないやつがあるのか Rangeならいけるわ
297 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 19:10:58 ] すみません、ご助言お願いいたします。 OS:Vista、Excel:2007 コンパイルを実行すると ”プロシージャの呼び出し、または引数が不正です”と表記されます。 この際、黄色い帯で示されるエラー部分が、 Public Function Zn(CZn, X, W, b, K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11) Zn = 2 * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 - K8 * X * W - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4) / _ (K1 * X + ((K1 * X) ^ 2 + 4 * K2 * X * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 _ - K8 * W * X - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4)) ^ 0.5) End Function のZnの式の部分です。 色々考えたのですが原因がわからず、試しに、上手くいく類似のプログラムの Znを代入してみたところ、エラーは出ませんでした。 代用したZnの式は Zn = 2 * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 - K8 * X * W - K9 * X * W ^ 2) / _ (K1 * X + ((K1 * X) ^ 2 + 4 * K2 * X * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 _ - K8 * W * X - K9 * X * W ^ 2)) ^ 0.5) です。 (K10とK12の項を削除したものです) 最初のZn式がエラーを示す原因等、ご助言お願いいたします。
298 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 19:48:59 ] 0.5
299 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 20:09:56 ] ^ 0.5
300 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 20:15:46 ] >>298 >>299 早速のご助言ありがとうございます。 0.5とは、最後のですよね。 ただ、エラーが出るZn式にも、出ないZn式にも含まれているのですが・・・?
301 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 20:28:09 ] そのエクセルほしいな 2kしかもっていないけど、基本的に^は整数しか出来ない Zn = Application.Power(〜〜 ,0.5) で代用
302 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 20:38:13 ] >>301 細かいけど前に「2 *」が抜けてないか?
303 名前:302 mailto:sage [2009/07/30(木) 20:40:41 ] 不足指摘してるのもまだ不足してたな さすがにそこまで応用力のないやつはいないか
304 名前:297 mailto:sage [2009/07/30(木) 20:46:40 ] >>301 ありがとうございます! 恥ずかしながら、301さんのスレを見て初めてVBAでワークシート関数の利用が 出来ることを知りました。。。 ほしいというのは、やはりここに書いただけではエラーの理由の解明が 難しいということでしょうか?
305 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 21:08:48 ] いや、全部確固内に記述しちゃえばよかろ
306 名前:297 mailto:sage [2009/07/30(木) 21:46:24 ] アドバイス頂いた方法でやってみたのですが、だめでした 最初のZnの式を Zn = 2 * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 - K8 * X * W - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4) / _ (K1 * X + Application.WorksheetFunction.Power(((K1 * X) ^ 2 + 4 * K2 * X * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 _ - K8 * W * X - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4)), 0.5)) としたのですが、 「worksheetFunctionクラスのPowerプロパティを取得できません」 とのことです。。。
307 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:01:33 ] いろいろ変えてみたら
308 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:24:23 ] これなら通るんだよね。 Sub test() Debug.Print 2 * Zn(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) ^ 0.5 End Sub Public Function Zn(CZn, X, W, b, K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11) Zn = (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 - K8 * X * W - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4) / _ (K1 * X + ((K1 * X) ^ 2 + 4 * K2 * X * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 _ - K8 * W * X - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4))) End Function
309 名前:デフォルトの名無しさん [2009/07/31(金) 00:02:27 ] Excel.Range("Sheet1!$A$1").Find(What:="") What:= ←ここに255文字以上入れると、動かんのだが。
310 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 00:36:05 ] Sub test() Dim HashedData Set HashedData = CreateObject("CAPICOM.HashedData") HashedData.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1 HashedData.Hash "abc123あいう" MsgBox HashedData.Value End Sub 暗号化プログラムを作っているのですが、予定では 「f95439120bf5c5d2b962cbe3a530199226f1ed2e」 と出る予定だったはずなのに違う値が出て来るヽ(`Д´)ノ
311 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 01:21:08 ] >>310 半角のみと全角のみで確認
312 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 07:04:59 ] Excelを勉強したくてスレ検索しました ここがヒットしました。普通のExcelとExcel VBAとの違いはなんですか? エクセルとは、プログラムしたエクセルに同じ動作を繰り返させるものだとホームページで読みました。
313 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 07:24:10 ] >>312 >普通のExcelとExcel VBAとの違い 比較する対象ではありません。 ExcelはExcel VBAを含みます。 しかし、例外もあり、含まないExcelもあります。 >エクセルとは、プログラムしたエクセルに同じ動作を繰り返させるもの 再帰的な定義ですね。 その「ホームページ」には「プログラムしたエクセル」の定義は書いてありましたか?
314 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 07:41:40 ] 暗号化なんてやったことないわ
315 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 09:58:31 ] >>297 Functionの最初に Debug.Print CZn; X; W; b; K1; K2; K3; K4; K5; K6; K7; K8; K9; K10; K11 ってのを追加して、エラーが出た時のパラメータを教えて
316 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:36:30 ] >>297 マイナスの平方根をとろうとしてる 実数解を期待してるなら、式かパラメータかどっちかがおかしい
317 名前:デフォルトの名無しさん [2009/07/31(金) 14:06:05 ] Excel2003使用 sheet1にある表のB列に「特定」があれば、その行をコピーして sheet2の2行目から下へ順番に貼り付けたいのですが、 sheet2への貼り付けがうまくいきません。 Rend = Range("c65536").End(xlUp).Row For i = 7 To Rend If Range("b" & i) = "特定" Then Worksheets("sheet1").Rows(i).Select Selection.Rows.Copy Worksheets("sheet2").Rows(i).PasteSpecial End If Next Worksheets("sheet2").Rows(i).PasteSpecialの変数(i)を Rend2=Range("a2").end(xldown).offset(1,0)を作って それを当てはめてもうまくいきません。 解決方法を教えてください
318 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 14:46:12 ] なにがどううまく行かないのかと シート2のセルをカウントする変数を組み込めばいいんじゃね
319 名前:317 [2009/07/31(金) 15:19:14 ] >>272 ありがとうございます。^^ おかげさまで解決しました。
320 名前:デフォルトの名無しさん [2009/07/31(金) 16:17:05 ] 【回答は】Excel VBA質問スルナ Part13【ググレ】
321 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 20:03:47 ] >>317 おそらく、sheet2をアクティブにしていないから
322 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 07:56:11 ] すいません。 一般的な関数(例えばsinなど)では EXCELのセル上で 『 =sin( 』を入力すると 入力セルの近くに『 SIN(数値) 』というクイックヒントがでます。 しかしVBAでユーザー定義関数をつくり、 同様にセル上で作成した関数を入力してもクイックヒントが出てきません。 どのようにすれば自作の関数でもクイックヒントがでるようになるのでしょうか。 教えてください。 Excel2003、WindowsXPです。
323 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 08:50:04 ] ヒントはヒントとして定義しなきゃ出ないよ Functipnプロシージャを書いただけじゃ、関数と引数を定義しただけだ とはいえ、Excelでユーザー定義関数のヒントを定義するのは面倒なので 「関数の引数」ダイアログを使う方法をオススメする こちらは定義というか宣言した引数がそのまま出てくる
324 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:32:00 ] WindowsXP Excel2000で作っています。 url = "http://・・・/a.html" Workbooks.Open Filename:=url という形で、社内のイントラネット上のhtmlファイルをブックとして開きたいのですが、 インターネットのファイルや、PC内のファイルは開けるのに イントラネット上のファイルは開けません。 なにか、特別な認証が必要なのでしょうか?
325 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:02:08 ] 社内イントラ上のhtmlファイルの参照を、http://・・・としてるの? それだと開くわけないよね。
326 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:46:15 ] んなわけなかろ いや端末アドレスがそうなってるなら問題ないだろ
327 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 19:07:40 ] IEや他のブラウザでurl = "http://・・・/a.html"が開けるかどうかだね
328 名前:324 mailto:sage [2009/08/02(日) 00:05:27 ] みなさんありがとうございます。 IEなどのブラウザでは開けます。 ちなみに、イントラネットのファイルのアドレスは 192.168.1.10/ 〜/〜.html みたいにIPアドレスになってます。
329 名前:デフォルトの名無しさん mailto:age [2009/08/02(日) 22:32:07 ] cells(x,y)="" cells(x,y)=Empty の違いってなんでしょうか?
330 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 03:28:45 ] >>329 EmptyはVariant型で「変数が初期化されていない」という意味の特殊な値。 "" はString型で長さが0の文字列。ただしCellsに代入した場合は自動的にEmptyに変換されるので 結果は同じになる。
331 名前:322 mailto:sage [2009/08/03(月) 05:41:14 ] >>323 ありがとうございます。 「関数の引数」ダイアログ理解しました。 しかしできることなら、やはりヒントを定義したいのですが その場合はどのような方法でやればいいのでしょうか?
332 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 06:37:59 ] 君には無理だ。やめておけ。
333 名前:デフォルトの名無しさん [2009/08/03(月) 14:57:23 ] シートを保存する時に書式を含む値のみを保存しているのですが、条件付き書式も 通常の書式に変換(&削除)したいのですが、何か良い方法がありますでしょうか?
334 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 17:31:03 ] >>333 新規のシートに はりた
335 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 17:32:32 ] 新規のシートに 貼りつけて保存すればいんじゃね
336 名前:デフォルトの名無しさん [2009/08/03(月) 19:54:43 ] OS -> Windows Vista Excel Office2007 ある文字列をカウントする関数Function()を作ってみたけど 参照しているセルの値が変わっても自動計算されません。 なぜでしょうか? Excelの自動計算はONにしてます。 また、マクロも有効になっています。 数式バーにカーソルを合わせてEnterキーを押すと そのセルだけが更新されます。
337 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:45:52 ] 参照式とFuncitonの内容を書きなさい。 それだけの情報だとなんともいえない。
338 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 00:23:59 ] あるシートに別ファイルシートのイベントマクロをコピーしたいのですが、 たくさんのシートがあるので、手作業でなく、コピーそのものをマクロ化する方法を教えて下さい。
339 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 00:43:47 ] >>338 モジュールのインポート、エクスポート
340 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 06:17:42 ] >>336 それだけの情報だとApplication.Volatile使えとしかいえない。 >>338 VB言語でVBプロジェクトを弄る方法は、表計算(Excel)とは関係ないので >>339 の方法がお気に召さないならそれ以上はスレ違いって話になる しかし、あるブックの複数シートで同一イベントを起こしたい場合 シートモジュールでのWorksheet_Changeの変わりに ブックモジュールでWorkbook_SheetChange使えば良いだけの話だがな
341 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 08:57:24 ] はぁ? VBEこそ、もろこのスレ向きの話題だろうが
342 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:03:08 ] >341 ハァ? (゚Д゚)y─┛~~
343 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:56:25 ] Microsoft Visual Basic for Applications Extensibilityを参照してImportで一括インポート Application.VBE.を使用して挿入 好きなほうをどうぞ
344 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 13:47:39 ] >>336 なんでCOUNTIFがあるのに自作するのか分らんが、関数の参照してるセルはきちんと引数に入れてるのか? 一部の揮発性関数をのぞいて、基本的に関数は引数が変化したときだけ自動では再計算する。 =COUNTIF(A1:A10,C1)ならA1:A10のいずれかのセル、またはC1が変更されたときだけだ。 だから自分で関数を作るときも範囲と検査値の二つの引数を入れるように作らないと駄目だ。 Application.Volatileで逃げるのは間違った解決策だから気をつけろ。
345 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:25:14 ] URLをページタイトルに置換するスクリプトなのですが動作が不安定です。 どこを修正したらよいでしょうか。どなたご教授お願いします。 Sub GetWebPageTitle() Dim objIE As Object Dim lngLastRow As Long Dim i As Long Dim strURL As String On Error GoTo ErrHandler 'IEのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.Application") '最終行取得 lngLastRow = Me.Range("A65536").End(xlUp).Row For i = 1 To lngLastRow strURL = Me.Cells(i, "A").Value objIE.Navigate strURL '表示完了まで待つ Do While objIE.Busy = True And objIE.ReadyState <> 4 DoEvents Loop Me.Cells(i, "B").Value = objIE.Document.Title Next i objIE.Quit MsgBox "タイトル取得完了" Finally:
346 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:25:55 ] >>345 の続き Set objIE = Nothing Exit Sub ErrHandler: With Err MsgBox .Number & vbCrLf & .Description, vbCritical End With Resume Finally End Sub
347 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:46:44 ] あ、そっかFalseにするんだ。 自己解決しました。 すみません。
348 名前:338 mailto:sage [2009/08/04(火) 19:41:57 ] >>339-343 ありがとうございます。 インポートは、シートでなくmodule にくっついてしまいだめでした。 教えていただいた方法を順に試してみたいと思います。 excel のvbaしかやったこと無いので、イベントをしらべだしてから VBEなどがあるのを最近知った初心者です。
349 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:55:33 ] , -'"´  ̄`丶、_ ,.∩ `ヽ 〃∪'´ ̄`二二人\ ヽ | ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ', |ハ ,ニ、 ,. - 、 | | | l | | ハ ィハ ,二ヽ. | | | | | 同じ板にコピペするとそのままだけど、 | | | じ' |トJ〉 /)} l | 違う板にコピペすると鬼のような怖い顔 | ハ 、'_,  ̄,, 厶イ川| に変わる摩訶不思議な佳子様コピペ。 l l /\ .. イV\川 | ,' l l ,イ `l ̄´ / /ヽl l l | l ハ `メ、 〃 ヽヽ、__ノ l ∨ └‐イ「ト--ァ'´ ハヽ__ノ ヽ/ } l」」 / / }`ー 〈_n| 八 / / /ノ 〈二二人 c /\/ / , イ / /厂 /\__>< {_
350 名前:336 [2009/08/04(火) 20:03:33 ] Excelのセキュリティの設定で常にマクロを有効にするか 確認するように変更したら自動計算されました。 >>344 複数の検索値でクロス集計するようにしています。 確かに範囲と検索値を引数に入れるようにしたほうがいいですね。 ありがとうございます。
351 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 07:54:36 ] まさかピボットテーブルでやった方が簡単なことを関数、しかも自作の関数でやってるんジャマイカ?
352 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 15:52:18 ] セルをビットに見立てて、エクセルで扱えないデータを格納・演算出来ることに気が付いたんだけど そもそも使わないんだよな……無意味なことをした
353 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 08:26:34 ] テンプレの使うということに順していないので、スレ違いな質問だったらすいません。 今、XPのExcel2003のVBAの勉強をして二日目です。(プログラム経験などは一切なし) 参考にしているのは下記アドレスのページで第6章の途中まで進めました。 excelvba.pc-users.net/ 他にも勉強するのにいいサイトがありましたらご教示お願いできないでしょうか? 個人的には動的? なツールのような使い方(任意の桁や条件の数字だけを抽出のような感じです)や 共通作業のソフト化(今は仕事でExcelを使うことはないですが…)を出来るようになるのが理想です。
354 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 12:43:01 ] そういうことがやりたいならVBAではなくVBの勉強した方がいいね しかし、サイト紹介もVBの話もスレ違いだから自分で探しな VBA分野で具体的な質問が有ったらまたおいで
355 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:15:56 ] 抽出結果をExcelに出力するならVBAでいいよ。
356 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:19:36 ] >>57 Open "ABC" & Str(i) & ".txt" とした方がいいのでは?
357 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:54:33 ] >>353 何で最近のゆとりは本買わないんだ。 本買え本。 しょーもないサイトを探し回る時間の損失に比べたら、2,3冊の本代なんて安いもんだ。
358 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:42:24 ] 保護をかけた状態でロックを外したセルへの移動が 一部出来なくなってしまいました。 →と←の移動は効くんですが、↑と↓の移動を受け付けてくれません。 ScrollLockやロック外し忘れでは無いと思います。 あと、セルをクリックするとセルの周りに太枠が出るじゃないですか? あれも時々出なくなりました。 この現象が起こるのは今の所1つのブックだけです。 調べてみたんですが、何が原因かさっぱりわかりません。
359 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:44:05 ] 途中で送信してしまったorz 原因分かる人いたら教えて下さい。
360 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 06:36:21 ] レスありがとうございます。 >>354-355 もし仮に目的がVBでないと難しいことが分かっても、VBAで覚えたことは使えると思うので とりあえずこのままVBAを学んでみようと思います。 >>357 確かにそうですね。 今日にでも書店でよさげな本を探してみます。
361 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 22:16:53 ] ここで本とかを買った人って、何の本買ったのか気になる。 俺は、よく分かるプログラミングVBA 基礎・関数・応用 (大村あつし)の奴を3冊買ったんだけど。
362 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 23:49:18 ] >>338 シートにイベントマクロをセットする方法がわかりましたのでご参考までに。 みなさまありがとうございました。 セットするマクロ 'チャートシート cost に mouseupイベントをセットする例 Sub mouseup_set() Dim i As Long With ActiveWorkbook.VBProject For i = 1 To .VBComponents.Count If Mid(.VBComponents(i).Name, 1, 5) = "Graph" Then If .VBComponents(i).Properties("Name") = "cost" Then .VBComponents(i).CodeModule.AddFromFile "D:\vbadir\mouseup.bas" Exit For End If End If Next i End With End Sub 'mouseup.bas の内容 Private Sub Chart_MouseUp(ByVal Button As Long, _ ByVal Shift As Long, ByVal x As Long, ByVal y As Long) Dim ElemID As Long, Arg1 As Long, Arg2 As Long ' ここにMouseUp時の処理記述 End Sub 以上
363 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 23:50:19 ] >>362 忘れた、追記 windows XP, excel2007 です。
364 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 00:02:16 ] >>362 私本管理のDB見たら、Excel関連だけで\30kは使ってた OS関係やプログラム全般と合わせたら軽く\100kは超えてる 俺プログラマでも何でもない文系人間なのにww
365 名前:デフォルトの名無しさん [2009/08/09(日) 00:27:30 ] aが0.01、bが0.01の状態で、 b=b+a としてセルに代入すると 0.010.01となってしまいます 何がいけないんでしょうか
366 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 01:12:55 ] >>365 a、bが文字列になってる 数値に変換を
367 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 08:18:40 ] >>361 大村あつしの本は、知識0の人になら僅かな足しにはなるが 他と比べて有用といえる物では無いな
368 名前:デフォルトの名無しさん [2009/08/09(日) 11:35:42 ] sheet1上でマクロを使ってて、sheet2の中の値を取ってくるとき、 わざわざsheet2をアクティベートしてまた戻す、という方法じゃないとだめ? 住所みたいにsheet2;cells(3,3)みたく指定できませんか?
369 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:46:33 ] セルの値ならmacro4.0うんたらかんたら
370 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:46:50 ] >>368 Function GetCell(WS As String, row As Long, col As Long) As Variant GetCell = Worksheets(WS).Cells(row, col).Value End Function とかじゃだめなの?
371 名前:デフォルトの名無しさん [2009/08/09(日) 11:52:52 ] >>370 ふむふむ。自作関数使ったことないんですが、やってみます! それから、論理記号の∃(存在)って、for-next文で代替するしかないんでしょうか? たとえば、 If A1からA10の間に100以上の値があれば Then みたいに使いたいんですが
372 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:56:16 ] >>361 パーフェクトマスターとかいうでかい本一冊買ったくらいかなぁ ただ、本分厚すぎて面倒なんで、基本的にExcel内のヘルプに頼ってる。
373 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 12:34:08 ] >>368 > 住所みたいにsheet2;cells(3,3)みたく指定できませんか? sheet2.cells(3,3)ではあかんの? >>371 はforで代用が一般的だと思う ワークシート関数のMAXとかで一発で済ませてもいいし
374 名前:デフォルトの名無しさん [2009/08/09(日) 13:13:44 ] max(Sheet2.Cells(s, 4) : sheet2.Cells(s+e,4)) でやったらエラーでした。 cellsで範囲指定するのはどうやるんでしょか?
375 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 13:16:11 ] どこまで続けるんだよ もういいだろ
376 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 13:19:20 ] >>374 セル範囲の指定はRange worksheetfunction.max(Range(Sheet2.Cells(s, 4),sheet2.Cells(s+e,4)))
377 名前:デフォルトの名無しさん [2009/08/09(日) 13:20:50 ] ありがとうございました。 助かりました。 たぶん10分後にまた何か質問します。
378 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 13:23:27 ] 少しは自分で考えろw
379 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 13:30:36 ] セルの指定もできずになぜここに来るかとも思うけれど 他に適当なスレもないしスレ違いすぎってこともないから まあ夏休み中はこんな流れでもいいんでない? なぜなに質問コーナーみたいなかんじで
380 名前:デフォルトの名無しさん [2009/08/09(日) 13:34:30 ] a=inputbox("繰り返しの数") for x=0 to a next x とするとfor文が無視されるんですが、変数をtoの後に持ってくることはできないんでしょうか?
381 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 13:39:22 ] >>380 できるよ aに1以上の数がはいってれば無視されないはず
382 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 13:41:27 ] a=inputbox("繰り返しの数") for x=0 to a msgbox x next x でやってみ?無視されてないから。
383 名前:デフォルトの名無しさん [2009/08/09(日) 13:56:44 ] a=inputbox("繰り返しの数") for x=0 to a sheet1.cells(2,2).value=w next x にしても無反応なのであった;; 別の場所に問題あるのかな。
384 名前:デフォルトの名無しさん [2009/08/09(日) 13:57:35 ] wじゃない、xでした
385 名前:デフォルトの名無しさん [2009/08/09(日) 14:03:39 ] もしかして・・・別のsub ... end sub の中でおこなったinputboxの値は有効じゃない!?
386 名前:デフォルトの名無しさん [2009/08/09(日) 14:06:25 ] やべぇ自分で気づいた俺天才!
387 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 14:07:07 ] >>385 アホwそれを先に言え
388 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 14:13:33 ] すげえことにきがついた・・・ サブを呼び出すときに変数?に戻る数を入れてやればいいんじゃね・・・?
389 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:54:04 ] 先読み回答しとくと、staticでググレ。
390 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 20:34:23 ] >>389 そのレスを>>380 の段階で付けられるようになれば神なんだろうなー 俺にはまだまだ無理だ
391 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 22:24:52 ] で、forが実行されないってのは何よ シートで見たいなら for x=0 to a cells(x.1)=x next とか書かないとわからないぞ
392 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 23:50:59 ] forが実行されないのは a<0 だからだと思う 例えばaがstring型だとか
393 名前:デフォルトの名無しさん [2009/08/10(月) 00:46:24 ] VBAで作成したCSVファイルを富士通系汎用機(EBCDIC)に送信する ということをやりたいのですが、 日本語全角文字を認識させるために、シフトイン、シフトアウト というコードを全角文字の前後に付与する必要があるらしいのです。 このシフトイン、シフトアウトをVBAでファイルに書き出すことは できるのでしょうか? シフトイン、シフトアウトは、16進数で28H,29Hという記述は見つけたのですが よくわかりません。 知ってる方いらっしゃいませんか? m−O−m WindowsXP、EXCELは2003です。
394 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 00:52:21 ] 全角絵文字がキモイ
395 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 02:25:59 ] それより日本語全角文字の文字コード分ってるのか?
396 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 06:42:15 ] ASCIIだろ
397 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 07:26:32 ] まずは、富士通汎用機のCSVファイルを windowsのエディタで開くところから始めるだろjk
398 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 08:20:34 ] コードを出力すること自体は簡単だけど どういう形式で出力すればいいのか質問者がわかってないと答えようがないわな そもそも16進のままどっかに書いとけばいいものなら回答の必要もないだろうし
399 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:29:42 ] >>395-398 ド素人は黙っとけ
400 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:38:20 ] そもそもスレ違いじゃないか?
401 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:00:07 ] バイナリデータをVBAで書きだせるかどうかについては、スレ違いじゃない。 んで、「ebcdic vba」でググってみたら、こんなページがヒットしたわけだが。 ASCII 文字コードと EBCDIC 文字コードとの変換方法 support.microsoft.com/kb/216399/ja
402 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 16:13:03 ] それじゃ日本語全角文字が変換できねーだろ
403 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 16:29:22 ] シフトイン .Write "(" シフトアウト .Write ")"
404 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 18:19:15 ] > バイナリデータをVBAで書きだせるかどうかについては、スレ違いじゃない。 残念、ハズレ VBスレならスレ違いじゃないが 『"E x c e l" VBA』スレでは、残念ながらスレ違い(>>1 参照)
405 名前:デフォルトの名無しさん [2009/08/10(月) 18:53:10 ] WindowsXP、EXCEL2003を使用しています。 シートのA1から下に30個くらい名前が書いてあり、その名前ごとに新しいシートを追加したいです。 こういうのって簡単にできる人には簡単すぎると思うんですが、教えてもらえるとうれしいです。
406 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 21:03:09 ] 試してないがこうか? sub シート追加() for a = 1 to 30 if cells(a,1) <> "" then sheets.add.name = cells(a,1) next end sub
407 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 21:32:35 ] 試してないがこの方がいいか? For Each cell In Range(Range("A1"), Range("A1").End(xlDown)) Worksheets.Add(, Worksheets(Worksheets.Count)).Name = cell.Value Next cell
408 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 21:46:22 ] 試してないけどこうじゃね! Application.DisplayAlerts = False For Each a In Sheets a.Delete Next Application.Save Application.DisplayAlerts = True
409 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 21:47:29 ] ためせよw
410 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 23:05:31 ] 試してないけどこれでいけるってビルゲイツが言ってた For Each C In Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)) Worksheets.Add after:=Sheets(Sheets.Count) ActiveSheet.Name = C Next C
411 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 23:20:12 ] 試したらこれでいけた Sub aaa() Application.DisplayAlerts = False For a = 2 To Worksheets.Count Sheets(a).Delete Next ActiveSheet.Cells.Clear Application.Save Application.DisplayAlerts = True End Sub
412 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 23:43:20 ] >411 >試したらこれでいけた 試してないけどSheets(a).Deleteはダメぢゃネーノ?
413 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 01:42:10 ] aは変数なんじゃね
414 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 06:36:51 ] >>410 試してないけど、ここは大丈夫か? Worksheets.Add after:=Sheets(Sheets.Count)
415 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 07:04:26 ] オートシェイプに背景画像を挿入する場合についての質問です。 手動でやる場合、 ・オートシェイプの書式設定 ・塗りつぶし ・色 ・塗りつぶし効果 ・図 ・図の選択 で、画像を挿入した際に、同ページに □図の縦横比を固定する □図形に合わせて塗りつぶしを回転する というオプションがありますが、このオプションをVBAで変更する方法を教えてください。 マクロの記録をしても、変更が記録されずに困っています。 WindowsXP/Office2003
416 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 09:39:24 ] >413 試してないけどシートのインデックス番号って削除したら前詰めじゃね? Sheets(1).Deleteなら分かる。
417 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 10:20:16 ] >>414 試してみたら2000では動いた 2003では試してないけど
418 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 10:50:25 ] >>324 の件ですが、どなたかご教授いただけないですかね・・・?
419 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 11:04:25 ] >>404 お前は何と戦ってるんだ
420 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 13:15:24 ] >>418 TCPIPの問題 ブラウザはデフォルトでアドレス変換したりするけどね エクセルでやりたいなら ¥¥PC名¥フォルダ〜 とかにしたら とりあえずググれば解決できる
421 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 13:17:45 ] >>419 いきなりどうしたの?
422 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 13:44:49 ] >>420 スレ違いなうえに、適当なことかましてんじゃねーぞ、ボケ
423 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 13:51:04 ] >>415 Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Rotation = 0#
424 名前:415 mailto:sage [2009/08/11(火) 15:23:47 ] >>423 > Selection.ShapeRange.LockAspectRatio = msoTrue は、 ・オートシェイプの書式設定 ・サイズ ・倍率 ・縦横比を固定する のON/OFFですね。 > Selection.ShapeRange.Rotation = 0# は ・オートシェイプの書式設定 ・サイズ ・サイズと角度 ・回転角度 の指定です。 どちらも目的の物とは全く違うようです。
425 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 16:22:39 ] >>422 が理解不能なのは俺だけ? 回答なのにスレ違いってなんぞ 適当云々は知らんけど、丁度いいし説明してくれるのかな?
426 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 17:53:16 ] VBA関係ないし、百歩譲ってもTCP/IPの問題じゃないし
427 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 18:02:11 ] >>425 適当かどうかも判断できないんだったら、黙っとけ
428 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 18:30:47 ] こういうことかな ebi.dyndns.biz/windowsadmin/2009/03/11/%E3%80%8C%E3%82%A4%E3%83%B3%E3%83%88%E3%83%A9%E3%83%8D%E3%83%83%E3%83%88%E3%81%AB%E7%B9%8B%E3%81%8C%E3%82%89%E3%81%AA%E3%81%84%E3%80%8D-%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%B5%E3%83%95/ おい関係ないなら誘導しろよ かいとう者に噛み付くなkzg あと説明もできないなら黙ってろ さっさと市ね ん
429 名前:423 mailto:sage [2009/08/11(火) 19:28:20 ] >>424 ・図の選択 で、画像を挿入した際に、同ページに □図の縦横比を固定する □図形に合わせて塗りつぶしを回転する Excel97だとそういうオプションないんだよな
430 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 21:14:34 ] 言い訳になってねーw
431 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 22:46:30 ] >424 ヘルプ参照または本屋にスパテク○○系を立ち読みしてくるべし。
432 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 10:40:26 ] 初心者ですが、質問よろしいでしょうか。 rangeやcellsは、オブジェクトになったりプロパティになったりとするのでしょうか。 私の認識では、rangeはオブジェクト、cellsはプロパティですが、 いろいろなコードを見ると オブジェクトとなったりプロパティになったりしているので ケースバイケースで使えるのかなと思ったのですが、これで合ってるのでしょうか。
433 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 11:00:35 ] オブジェクトとプロパティの意味を勉強しなおせ。
434 名前:432 mailto:sage [2009/08/12(水) 11:13:26 ] オブジェクト=対象 プロパティ=属性
435 名前:432 mailto:sage [2009/08/12(水) 11:16:34 ] 修正 オブジェクト=構成要素
436 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 11:37:44 ] なら分かるだろ? >私の認識では、rangeはオブジェクト、cellsはプロパティですが、 その認識が間違い。 Rangeに変数が使えないとかCellsでは1セルor全セルしか指定できない などの制約によって使い分けてるだけ。
437 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 11:47:33 ] >>436 その説明もおかしいだろw
438 名前:432 mailto:sage [2009/08/12(水) 12:17:09 ] すいません。。。 勉強しはじめたばかりで。
439 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 12:35:00 ] >>436 Range("A" & i).Valueとかよく使うよ 手元のVBA辞典だと Rangeはオブジェクトとプロパティ Cellsはプロパティ 実例でいうと Range("B2").Cells(2, 2).Activate Range("B3").Range("B2").Activate と書けるが Cells(3, 2).Range("B2").Activate とは書けない
440 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 12:39:43 ] Range("B3").Range("B2").Activate は オブジェクト.プロパティ.メソッド
441 名前:432 mailto:sage [2009/08/12(水) 12:47:08 ] 439さん ありがとうございます! VBA辞典買います。 ずうずうしくもうひとつ質問です。 Worksheets("sheet1").Cells(i,5).Value この場合 コレクション.プロパティ.プロパティ でしょうか。
442 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:27:02 ] Cells.selectは?
443 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:27:52 ] コレクションはオブジェクトの集合体 Worksheets("sheet1")はオブジェクト Worksheetsはコレクション 実例 Worksheets.Count Worksheetsコレクションに含まれるWorksheetsオブジェクトの数
444 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:29:18 ] プロパティで取得できるものが、オブジェクトだったりそうでなかったりするんだ。 rangeプロパティもcellsプロパティもrangeオブジェクトを取得できる。 rangeのcountプロパティはlongを返す。 >Cells(3, 2).Range("B2").Activate 書ける。 コレクションもオブジェクトだコラ。
445 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:43:14 ] Cells.selectのCellsは、Cellsコレクション >444 Cells(3, 2).Range("B2").Activateって書けたね、スマソ >コレクションもオブジェクトだコラ それはそうだが、 コレクションはCountできるが、オブジェクトはCountできないし オブジェクトにNameはあるが、コレクションにNameはない
446 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:46:21 ] /) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
447 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:13:24 ] >>445 お前もう何も書くな
448 名前:432 mailto:sage [2009/08/12(水) 14:18:12 ] なるほど。 勉強になりました。 ありがとうございます。
449 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 16:52:27 ] >>445 マジなのかジョークなのか、判断に苦しむ。
450 名前:デフォルトの名無しさん mailto:age [2009/08/12(水) 17:49:21 ] はじめまして LineInputでファイルを一行づつ読み込みたいのですが 読み込みたいファイルがUNIXのファイルなんで改行がLFとなり一行と認識してくれません。 一行ごとに読みたいのですが何かいい方法ありますか?
451 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:06:22 ] >>450 変数に読み込んでからvblfで分割がいいのでは?>>215 あたりを参照
452 名前:デフォルトの名無しさん [2009/08/12(水) 20:54:40 ] ワークシートを呼び出すとき、 Sheet1のようなオブジェクト名で呼ぶのと、 Sheets("名前")で呼ぶのとでは、 動作が異なる場合がある?なぜ? Sheet1(名前は"テスト"): Sub test(X As TestType) MsgBox X.a End Sub 標準モジュール: Type TestType a As String End Type Sub test() Dim X As TestType X.a = "ほげ" Call Sheet1.test(X) '動く Call Sheets("テスト").test(X) '動かない End Sub なるべくシート名を使いたいのだが…
453 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 21:56:02 ] >>452 詳しい人が来るまでの繋ぎに気付いた点をレスすると シート名と言ってもオブジェクト名としてのシート名と表示上のシート名は多分別物で VBEで「sheet1(うんじゃらげ)」の前半が多分オブジェクトとしてのシート名。 プロパティーウィンドウから変更できた気がするようなしないような。 質問のケースへの対応なら 表示上のシート名からインデックス番号を取得してそれを使うのが早いかな?Byなんちゃって回答者
454 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 22:09:47 ] >>453 ありがとうございます、 Sheet1と書いたのはオブジェクト名としてのシート名、 Sheets("テスト")は表示上のシート名です。 オブジェクト名もプロパティウィンドウから変更できるのを いま知ったので、今後はオブジェクト名だけを使えば解決、だけど、 ここまで全部、表示上のシート名で書いてきたから変更がめんどいのと、 上記の動作が異なるメカニズム自体を知っておきたくなって。
455 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 22:52:17 ] Sheet1はクラス、Sheets("sheetname")はWorkSheetオブジェクト
456 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 23:10:33 ] 又、オブジェクト指向の話かww
457 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:05:49 ] >>455 だと、なんで>>452 のようになるの?
458 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:09:02 ] >>455 Sheet1は事前バインディング、Sheets("テスト")は実行時バインディング
459 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:21:06 ] >>455 Excel2000(VB6.0)でも再現したからそれはない
460 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:41:12 ] >>459 vb6.0にクラスの概念がないと思っている人?
461 名前:458 mailto:sage [2009/08/13(木) 00:41:15 ] 失礼、 >>458 は>>452 宛で
462 名前:452 mailto:sage [2009/08/13(木) 00:57:14 ] >>458 ありがとうございます。 Excel VBAでのオブジェクト指向の理解が足りないので 十分には理解できてませんが、教えた頂いたキーワードでググったら、 何が問題なのかはちょっとわかりました。 シートの参照は、どちらでもいい場合は 事前バインディングになるSheet1のほうがメリット多そうなので、 以後なるべくこちらを使うことにします。
463 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:06:26 ] >>460 >>455 が暗黙のインスタンスのことを言っていると解釈した上でのレスだ
464 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:15:52 ] formsコレクション知ってるならいいよ。
465 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:22:09 ] >>464 ごめ。いみふだ。なしで。
466 名前:デフォルトの名無しさん [2009/08/13(木) 12:37:06 ] Excel2003/XP 配列で質問させてください。 Dim myArray() As Variant Dim r As Long r = Range("C1").End(xlDown).Row ReDim myArray(r) myArray = Range("C1:C" & r) MsgBox myArray(1) '←エラー発生 End Sub Msgboxでエラーとなるのですが、原因はmyArrayが2次元 配列になっているのが原因でした。 ステップインで確認すると myArray = Range("C1:C" & r) の時にローカルウィンドウの型で確認すると2次元になってしまいます。 何故配列myArrayは2次元になってしまうのでしょうか? よろしくお願いします。
467 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 12:38:19 ] セル範囲を流し込んだから 仕様
468 名前:466 mailto:sage [2009/08/13(木) 13:31:03 ] >>467 仕様でしたか・・・ レスありがとうございました。
469 名前:デフォルトの名無しさん [2009/08/13(木) 17:11:11 ] 検索する時に検索値に変数を代入するにはどうしたらいいのでしょうか? 例えば、変数Aに「りんご」を代入し、ワークシート全体から「変数A」で検索して「りんご」を探したいのですが・・・
470 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 18:58:46 ] 検索をマクロで記録して、 "" で囲まれてる文字列の部分を、 ダブルクオーテーション外して変数名にすれば良いのさ。
471 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:29:27 ] ユーザー設定ボタンをツールバーに組み込んでるんですが、 ボタンでトグル動作、例えば書式の太字や斜体みたいのやりたいのですが、 マクロ内でボタンが押される度に画像を変えて、状態を記録してってやらんとダメでしょうか? プロパティとかでトグルボタンが設定できて状態が読めたりするとうれしいのですが
472 名前:デフォルトの名無しさん [2009/08/13(木) 23:00:29 ] インプットボックスを使って20個の整数を入力して、大きい順に並べ替える プログラムを作りたいんですが、簡単に作れますかね?? VBAはほとんど素人で、今勉強を始めたばかりです。。 とりあえずコレは明日までに仕上げたいんですが、
473 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:15:19 ] >>472 割と簡単だけどズブの素人が明日までに仕上げるのは無理かも
474 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:26:24 ] >472 アキラメロン♪
475 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:58:36 ] ひんとやるわ Sub test() Dim lst As New Collection lst.Add (InputBox("1:")) lst.Add (InputBox("2:")) lst.Add (InputBox("3:")) lst.Add (InputBox("4:")) lst.Add (InputBox("5:")) For Each v In lst 'ここでソートしてね Debug.Print v Next End Sub
476 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 00:13:30 ] >>472 作ってみたよ。 Option Explicit Sub 整数を入力して大きい順に並べ替える() Dim aaa As Integer For aaa = 1 To 20 Cells(aaa, 1).Value = Application.InputBox(Prompt:="数値を入力してください", _ Title:="数値入力", _ Type:=1) Next Range("A1:A20").Sort _ Key1:=Range("A1") _ , Order1:=xlDescending _ , Header:=xlGuess _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ End Sub
477 名前:デフォルトの名無しさん [2009/08/14(金) 03:51:41 ] >>475 >>476 本当にありがとうございます。 お二人に神のご加護があらんことを!
478 名前:デフォルトの名無しさん [2009/08/14(金) 03:58:38 ] 今のところ、まだIF文とかfor文までしか理解できてないんで、2人の文にあった関数調べて頑張ります! 本当助かりました!
479 名前:415 mailto:sage [2009/08/14(金) 09:58:19 ] >>431 ヘルプは質問前に項目名で検索してみましたが、関係ない物ばかりで 目的の物は出てきません。 「スパテク○○系」というのが「ExcelVBAスパテク368」のことなら 読んできましたが載ってませんでした。 「スパテク○○系」というのがこれではなく、他に確実に載ってるものがあるなら 出来れば内容を教えて欲しいところですが、せめて正式な書籍名だけでも教えてください。 確実に載ってる書籍が無いなら、引き続きここで >>415 をお願いします。
480 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 12:02:35 ] >>471 application.commandbars.コントロール じゃいかんかね
481 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:23:05 ] >>480 それをヒントに頑張ったらでけた CommandBarButton.State にボタンのON−OFFがあった ありがとう
482 名前:デフォルトの名無しさん [2009/08/15(土) 12:43:39 ] すいません教えてください FileCopy D:\aaa.txt, "C:\aaa.txt" これでD直下にあるaaa.txtファイルをC直下にコピーするという事ですが これだとどうしてもaaa.txtというファイル名を指定しなければなりません これを FileCopy D:\aaa.txt, "C:\" みたいにaaa.txtをC直下にそのままの名前でコピーさせたい場合ってどうすればいいのでしょうか?
483 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 13:38:13 ] >>482 どんなシチュエーションかわからんけど 第一引数でファイル名を指定する必要がある以上ファイル名は既に分かっているはず 例えば filename="aaa.txt" FileCopy "D:\"&filename,"C:\"&filename みたいなんだとダメなん? あとはFileCopyじゃなくてFileSystemObject使うとか
484 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 14:48:42 ] >482 用途が分からんけど Source = "D:\aaa.txt" Destination = "C:\" 'Sourceからファイル名のみを取出す処理をここに記述 FileCopy Source, Destination & FileName とすればいいんじゃない? ファイル名のみを取出すのは、文字列関数なんかを使えば できると思うけど...... んで 自分ならこうするってのを参考程度に 作ってみた(Dir関数を使用) Dim Source, Destination, FileName Source = "D:\aaa.txt" Destination = "C:\" FileName = Dir(Source) If FileName <> "" Then FileCopy Source, Destination & FileName Else MsgBox (Source & "が見つかりません") End If
485 名前:デフォルトの名無しさん [2009/08/15(土) 14:53:36 ] EXCEL2003,XPsp2です。 次のコードが実行時エラー1004になります(2行目)。 c=5 Columns("3:" & c).Select 列選択の範囲を可変(実行時決定)にしたいのですが、 どうすればよいのでしょうか。 よろしくお願いします。
486 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 15:33:50 ] >485 なんかColumnsの使い方間違っているような あんまし詳しくないんでなんとも言えないけど Range使っちゃだめなケースなの?
487 名前:485 [2009/08/15(土) 16:10:43 ] >>486 レスありがとうございます。 3列からc列まで選択できれば、何でも結構です。 ちなみにRangeだと、どうすれば良いのでしょうか?
488 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 16:13:43 ] >>487 つマクロの記録
489 名前:486 mailto:sage [2009/08/15(土) 16:41:19 ] >487 このケースは、VBAを使う上での基本中の基本だとおもうので 調べてくださいとしかいえません。 >1 の★5 と★6 を熟読の事
490 名前:487 [2009/08/15(土) 17:07:16 ] >>488 ,489 レスありかどうございます。 マクロの記録には、 Columns("3:5").Selectと出てきます。 c=5 Columns(〜c〜)とは出て来ません(変数を使ったコードは出てこない)。 どうすれば良いのでしょうか?
491 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:24:58 ] >>490 >>(変数を使ったコードは出てこない)。 出てくるわけネーダロw
492 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:47:37 ] >>490 dim c as string c = "5" でどうでしょう?
493 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:49:02 ] >>487 ヒント range ( , ) columns(3) columns(c) .select
494 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:06:48 ] >>493 492ですができました。 勉強になりました。 ありがとうございます。
495 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:16:48 ] マクロの記録をすると Columns("C:E").Select ってでてくるよ >>492 "3:" & c &は文字の結合だから
496 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:19:09 ] Columns("3:5").Selectって記録マクロでできるか? Range("3:5").SelectとかRange("3:5").Selectならわかるが、Columns("3:5")は動かんなぁ。 記録マクロが動かんマクロになるわけないと思うが。
497 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:20:03 ] 493で答え出とるがな
498 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:20:14 ] すまん、Range("3:5").SelectとかRows("3:5").Selectの間違い。
499 名前:492 mailto:sage [2009/08/15(土) 18:22:07 ] すいません。 僕のは間違えです。
500 名前:486 mailto:sage [2009/08/15(土) 19:17:25 ] >>495 へのレス >>490 >>495 は同一人物だと仮定してレスします 別人だったらすみません。 >>490 >マクロの記録には、 >Columns("3:5").Selectと出てきます。 >>495 >マクロの記録をすると >Columns("C:E").Select >ってでてくるよ なんかレス番によってマクロの記録結果が違っているのですが.... Columns("3:5").Select って本当に記録された?
501 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 20:07:43 ] ヒント 列と行を広辞苑で調べてみようっ!
502 名前:デフォルトの名無しさん [2009/08/15(土) 21:34:46 ] オブジェクトやプロパティやメソッドの検索の基本的なやり方を教えて頂きたいです。 オブジェクトブラウザ インテリジェンス ウォッチ ヘルプ、MSDN、Google 等々ありますが、これらの強み弱み、表示できない事、表示できる事を、 上手くまとめて頂けないでしょうか。 ウォッチでは実行時のプロパティーは表示されるけど、 何故か一部のプロパティーが表示されないし、 メソッドは当然の如く表示できません。 オブジェクトブラウザやインテリジェンスは、 実行時系プロパティーが当然取れません。 隠しオブジェクトについては、表示する様にすれば表示できますが。 ヘルプは実行時系も隠しもメソッドも全てあると思いますが、 検索性に難ありで、網羅性や信頼性に疑いを持ってしまう所アリ。 間違いがあったり、足りない所があれば教えて頂きたいです。 アーリーバインディングやレイトバインディングとか、 その辺りとの関わりも良く分かって無いです、 教えていただけると助かります。
503 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:32:48 ] 宿題は自分で頑張ってね。
504 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:34:06 ] >>502 ググレカス
505 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:30:05 ] 質問です 一つ目 選択範囲のセルをオブジェクト変数に代入するにはどうすればよいでしょうか? Dim aaa aaa = Selection としてもaaaにはvalueしか入らず、文字列の配列になってしまいます。 二つ目 選択範囲の全てのセルに対し、 長さが5じゃなければそのセルに文字列""を代入するというコードを書いてみましたが aaa = "" の行で「実行時エラー'10' この配列は固定されているか、または一時的にロックされています」 というエラーが出ます。どういう風に書けばよいのでしょうか? また、aaaの文字列の配列に直接値を入れたとしてもselectionに反映されません。これもどうすればよいのでしょうか? 勉強中に作ってみたものなので、特にこのコードを使って何かを処理するわけではありません。 コレクションをうまく使ってみたいと思っています。 よろしくお願いします。 Sub a() Dim aaa Dim m aaa = Selection For Each m In aaa If Len(m) <> 5 Then aaa = "" End If Next End Sub
506 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:51:17 ] >>555 Sub test() Dim rng Set rng = Selection For Each cell In rng If (Len(cell) <> 5) Then cell.Value = "" End If Next End Sub
507 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:55:21 ] >>506 おお、すごい!ありがとうございました
508 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:34:34 ] >>505 はオブジェクト指向の考え方を一度学んだ方が良いと思う 今後も、できねー、なんで?を連発の予感
509 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:37:25 ] dimで宣言するなら型までだな
510 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:39:51 ] >>509 同意 更に option explicit を入れないと何となく動くけど、変なエラーが・・・になる
511 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:46:42 ] C使ってるとこの表現忘れがちになるな 俺だけかな
512 名前:415 mailto:sage [2009/08/16(日) 08:44:11 ] 既に目を通してくれた方には煩わしいかもしれませんが 未解決のまま流れているので再投させていただきます。 オートシェイプに背景画像を挿入する場合についての質問です。 手動でやる場合、 ・オートシェイプの書式設定 ・塗りつぶし ・色 ・塗りつぶし効果 ・図 ・図の選択 で、画像を挿入した際に、同ページに □図の縦横比を固定する □図形に合わせて塗りつぶしを回転する というオプションがありますが、このオプションをVBAで変更する方法を教えてください。 マクロの記録をしても、変更が記録されずに困っています。 WindowsXP/Office2003
513 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2009/08/16(日) 09:01:18 ] drawingobjectでどうだ