1 名前:デフォルトの名無しさん mailto:sage [2013/10/17(木) 22:04:40.64 ] ExcelのVBAに関する質問スレです ___ ___ /____ヽ ____ /____\ | |´・ω・`| | /___ヽ .l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ !、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/ ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/  ̄  ̄ ̄ 前スレ Excel VBA 質問スレ Part32 toro.2ch.net/test/read.cgi/tech/1381151717/ このスレはコード書き込みOKです。 作成依頼もOKですが、作成依頼限定ではありません。 コードが嫌な人はこちらのスレへ toro.2ch.net/test/read.cgi/tech/1381151995/l50
152 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 21:01:29.51 ] >>148 冗談で言ってるのかと思ったら 本当でビビったw
153 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 21:07:26.86 ] 変数の話ならそんなことより DimとPrivateの違いって何なの?
154 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 21:37:29.33 ] >>153 モジュールレベルで宣言したときのスコープ(参照できる範囲)が違う と思ったけど、モジュールレベルで使うとDimと同じスコープか プロシジャレベルで使えるかどうかの違いだけで同じだな VBではPublicかPrivate書いたらDimを省略できる出来るだけだったと記憶してるが VBAではそうじゃないっぽいな
155 名前:デフォルトの名無しさん mailto:sage [2013/12/09(月) 20:52:31.18 ] >>153 Dimは遠い昔の、それこそVBじゃない頃、 N-Basicとかで配列をDim(dimension)で 宣言してた頃の名残りで盲腸みたいなもんだから、 出来ればPrivateで宣言した方がいいと、個人的には思う。 コメントをアポストロフィで付けないで、REMで書く様なもん。
156 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 01:13:10.32 ] シングルコートまたはシングルコーテーションと言わずにアポストロフィとおっしゃるのは癖ですか?何か意図があれば解説きぼんぬ
157 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 01:51:33.24 ] それを言うなら自分もまず「シングルクォート」と書くべきじゃね
158 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 02:05:44.25 ] >>156 引用符(コーテーションマーク、クォーテーションマーク)は、前と後の一対で使うもの
159 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 02:09:15.25 ] シングルコーテーションマークは、英語で使われ、 日本語ではあまり使われない (中国語や韓国語では普通に使われるらしい)
160 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 02:38:21.76 ] シングルクォーテーションとアポストロフィは厳密には別物なんだろうけど もともともコメント記号としてどっちの意図で使われたのかはわからんしなぁ 俺もこの文脈なら'はアポストロフィって言うんだが、ヘルプみると >コメントを入力するには、先頭にクォーテーション (') を入力するか、Rem ステートメントで指定します。 とか >コメント行は、先頭にクォーテーション (') または Rem ステートメントのいずれかと、 とか書いてあるから、あれはクォーテーションと呼ぶのが正しいのかもしれん
161 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 03:14:25.20 ] 記号の読み方はJIS規格で「シングルクォーテーションマーク」と定められているので議論の余地はない 英語的な解釈をするなら、アポストロフィはコメント行の先頭に使っていい記号ではない 本来はクォーテーションで前後を囲ったであろう物を、8bit時代のMS-BASICのリソース的な制約から 後半を省略可能にしたと見るのが妥当
162 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 04:19:23.00 ] そういうのも定められてるのか。 そのJIS企画の当該ページのリンクが貼られたらこの話は終わりにしよう。 それまでは存分に語らい合いましょう! ってExcel VBAスレじゃないですか。 おわり。
163 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 04:33:44.43 ] >>161 お前のキーボードはjIS規格配列なのか? VBAはいつからJIS規格になったんだ 違う規格の定義をあてはめて議論の余地がないとか笑わせる
164 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 04:42:38.53 ] おーっとここで待ったが入ったーっ! これは確かにと言わざるを得ない。 これで結論はもう出たということか。 VBAのオフィシャルドキュメントで、 コメントには何を使うと記載されているのか? で、この話に執着する者達が終着できそうだ。 公式文書のリンクが貼られたらこの話は終わりにしよう。 それまでは存分に語らい合いましょう! って略
165 名前:桃白白 ◆9Jro6YFwm650 [2013/12/10(火) 05:26:36.90 ] >>164 語らうには語り合うという意味があるから合うを付ける必要ないんじゃないかな。 語らいましょう、または、語り合いましょうでいいと思うんだよね。
166 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 05:33:56.97 ] >>165 うっせーばーか いいと思うんだよねってなんだよ いいんだよって言い切れないのかよ もっと自信もてよボケカス 早くVBAの公式文書のリンク持ってこいや
167 名前:桃白白 ◆9Jro6YFwm650 [2013/12/10(火) 05:38:24.57 ] (´・ω・`)・ω・`) キャー / つ⊂ \ 怖いー
168 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 05:57:51.45 ] \ U / \ U / / ̄ ̄ ヽ, / ', / _/\/\/\/|_ \ ノ//, {0} /¨`ヽ {0} ,ミヽ / \ / \ / く l ヽ._.ノ ', ゝ \ < バーカ! > / /⌒ リ `ー'′ ' ⌒\ \ / \ (  ̄ ̄⌒ ⌒ ̄ _)  ̄|/\/\/\/ ̄ ` ̄ ̄`ヽ /´ ̄ | | −−− ‐ ノ | / ノ −−−− / ∠_ −− | f\ ノ  ̄`丶. | | ヽ__ノー─-- 、_ ) − _ . | | / / | | ,' / / / ノ | ,' \ / / | / \ /_ノ / ,ノ 〈 \ ( 〈 ヽ.__ \ \ ヽ._> \__)
169 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 19:53:40.33 ] まぁいいじゃないか。 「'」に変わりはないんだろうし。
170 名前:デフォルトの名無しさん mailto:sage [2013/12/13(金) 00:23:21.08 ] Excelにはテキストリーダー の機能があると聞きました。 それに音程付けてボーカロイドみたいにすることってできますか?
171 名前:デフォルトの名無しさん mailto:sage [2013/12/13(金) 05:55:28.56 ] 無理
172 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 07:52:32.98 ] >>170 可能
173 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 20:26:43.18 ] マクロの設定を有効にしているにもかかわらず多変量解析を行おうとすると マクロが使用できないか、全てのマクロが無能になっている可能性があります、と出ます どうすれば多変量解析を実行できるでしょうか?
174 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 20:39:43.00 ] excelのバージョンも書かず、どこに置いてあるものなのかも言わず excel2007以降なら信頼できる場所に置いてあるのかいないのかなどなど情報を一切書かず
175 名前:デフォルトの名無しさん [2013/12/15(日) 20:45:23.66 ] >>173 他のブックのVBAでも同じ状態? ググって見つかった下記などは試してみたのかな answers.microsoft.com/ja-jp/office/forum/office_2007-excel/%E7%AA%81%E7%84%B6%E3%83%9E%E3%82%AF%E3%83%AD/b9379ad8-40f6-4415-b490-3090a900a8a0?msgId=122645e7-040b-400b-8f7e-77bddfa6e101
176 名前:デフォルトの名無しさん mailto:sage [2013/12/17(火) 22:47:10.17 ] よくわかりませんが同じようなスレがここにもありましたので 同じ質問になると思いますが 日付で今日より1年前のデータで、最古のデータ行を拾いたいのです WorksheetFunction.Matchで照合の型を-1で、降順に並び替えれば うまくいきますが、データは昇順の状態で 一年前の最古のデータ行を拾う方法ありますか? 昇順のままで照合の型を-1だと当然失敗します (最新のデータを拾ってしまいます) いろいろ調べたのですが、いい方法がみつかりませんでした どなたかいい方法ありませんか?
177 名前:デフォルトの名無しさん [2013/12/17(火) 23:20:52.18 ] >>176 マルチ どちらかを質問終了するべし
178 名前:176 mailto:sage [2013/12/19(木) 01:49:09.75 ] 自己解決できました
179 名前:デフォルトの名無しさん [2013/12/19(木) 18:30:09.13 ] 同じフォルダ内にある複数のtextの記述(数字が縦に6行)を読み込むマクロを 作りたいのですが、 たとえば1つ目のtextの1行目をA-1に 2行目の記述をB-1に … と6行を6列のに読み込み、さらにファイル名(文字列)を7列目のG-1に読み込み、 2つ目のtextの1行目をA-2に、2行目の記述をB-2に … と読み込ませることはできませんでしょうか?
180 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 19:30:34.70 ] できます
181 名前:デフォルトの名無しさん [2013/12/19(木) 19:40:28.24 ] できましたら、その方法を教えて頂けませんでしょうか?
182 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 19:52:46.93 ] まだできていませんので教えることはできません
183 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 21:54:28.52 ] >>179 とりあえず書いてみたけど、やっつけなのでエラー処理とかは書いてません 以下のマクロを書いたブックと同じフォルダに"text"フォルダを作って その中に読み込ませたいテキストファイルを入れてください。 マクロを実行すると、マクロと同じフォルダに"test.xlsx"というファイルが作成されます。 既に"test.xlsx"が存在する場合、上書きするか聞いてきます。 "text"フォルダ内には不要なファイルは入れないでください。 Option Explicit Sub test() Dim f As Object Dim w As Workbook Dim t As Workbook Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Set w = Workbooks.Add With w.Sheets(1) For Each f In fso.GetFolder(ThisWorkbook.Path & "\text").Files Set t = Workbooks.Open(f) t.Sheets(1).UsedRange.Copy If .Cells(1, 1) = "" Then .Cells(1, 1).PasteSpecial Transpose:=True Else .Cells(.Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial Transpose:=True End If t.Close Next f End With w.Close SaveChanges:=True, Filename:=ThisWorkbook.Path & "\test.xlsx" End Sub
184 名前:183 mailto:sage [2013/12/19(木) 22:08:35.18 ] やべ、各テキストファイルのファイルネームを入れるっての忘れてた…orz
185 名前:183 mailto:sage [2013/12/19(木) 22:22:52.58 ] 修正も超やっつけですが、コード中の t.Close の行の前に .Cells(.Rows.Count, 1).End(xlUp).End(xlToRight).Offset(, 1) = t.Name ってのを一行入れてください。
186 名前:デフォルトの名無しさん [2013/12/20(金) 09:18:25.34 ] ありがとう! あなたは救世主です! 本当にたすかりました。
187 名前:デフォルトの名無しさん mailto:sage [2013/12/20(金) 16:20:17.72 ] 大学生でエクセルテストちょっと前にしたんですが答えは小数点第2位までて言われたので切り捨てして提出したんですが いつ切り捨てするのかよくわかりませんでした。 計算は1度計算したのをさらにかけたり割ったりします。 ここで、 最初にかけ算→小数点切り捨て→かけ算 なのか かけ算→かけ算→割り算など全部した後いっきに切り捨てた方が良いのか 前者でやっていたんですがこの2つだと当然答えも違ってきますよね 普通どっちが正解なんですか?
188 名前:デフォルトの名無しさん mailto:sage [2013/12/20(金) 18:55:18.13 ] >>187 toro.2ch.net/test/read.cgi/tech/1381151995/236
189 名前:デフォルトの名無しさん mailto:sage [2013/12/20(金) 22:31:06.75 ] ここ最近、毎日のようにマルチが現れるな
190 名前:デフォルトの名無しさん mailto:sage [2013/12/21(土) 23:30:15.40 ] >>189 スレ立て自体がマルチなんだからしゃーない
191 名前:デフォルトの名無しさん mailto:sage [2013/12/22(日) 06:22:28.69 ] ここ最近、毎日のようにマルチマルチってうるせえ馬鹿が現れるな
192 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 19:22:49.48 ] 本年大変お世話になりました 来年もお力をお借りするかもしれませんが宜しくお願いいたします 机周りの掃除が終りましたので帰ります 皆様良いお年を!@22歳OL
193 名前:デフォルトの名無しさん [2013/12/31(火) 00:00:44.71 ] たまにはこのスレに遊びにきてね
194 名前:デフォルトの名無しさん [2014/01/01(水) 11:34:15.70 ] あけおめ〜〜〜〜〜〜
195 名前:デフォルトの名無しさん mailto:sage [2014/01/03(金) 13:54:51.99 ] ことよろ
196 名前:デフォルトの名無しさん mailto:sage [2014/01/03(金) 22:44:38.74 ] さくおせ
197 名前:デフォルトの名無しさん mailto:sage [2014/01/04(土) 02:37:30.74 ] なあ、桃白白 ピラフ知らない?
198 名前:デフォルトの名無しさん mailto:sage [2014/01/04(土) 05:04:21.87 ] あけましておめでとう 23歳OL
199 名前:デフォルトの名無しさん [2014/01/14(火) 15:36:02.26 ] 何をどこで質問したらいいかもわからないからスレ違いなら許して。 適当に1〜100までとか1〜20までとかの数字から無作為に実数の数字を抽出 するのはどうしたらいいのでしょうか。
200 名前:デフォルトの名無しさん mailto:sage [2014/01/14(火) 16:31:22.93 ] >>199 VBA 乱数 とかでググるといいと思うよ
201 名前:デフォルトの名無しさん [2014/01/14(火) 18:59:00.73 ] >>199 Rnd でどう?
202 名前:デフォルトの名無しさん mailto:sage [2014/01/16(木) 02:21:35.14 ] >>199 らんだまいずもわすれずにね
203 名前:デフォルトの名無しさん [2014/01/17(金) 15:26:54.71 ] 放置プレイ
204 名前:デフォルトの名無しさん mailto:sage [2014/01/19(日) 02:44:28.45 ] エクセルは2000、VBAは6.0です。 同じファイルにある他のマクロはちゃんと起動するのですが、 同じファイルにある、とあるマクロを実行しようと ユーザーフォームの実行(▲を右90度傾けたボタン)を押しても うんともすんともいいません。 エラーも出ません。 何が原因だと思いますか?
205 名前:デフォルトの名無しさん mailto:sage [2014/01/19(日) 03:11:26.69 ] >>204 一瞬で計算が終わって、動いてるのに気付いてないだけの可能性
206 名前:デフォルトの名無しさん mailto:sage [2014/01/19(日) 09:29:19.72 ] >>204 具体的なコードを貼らないと、なんとも言えん。 具体的なコードを晒すのが嫌なら、自力でなんとかするか諦めよう。 というか、コード全部は晒さないにしても、ステップ実行とかして どの関数やステートメントで想定外の動作が起きてるか調べて もうちょっと詳しい状況書けば、憶測も少しは煮詰まるかもだけどな。 そもそもデバッグ出来ないってのはVBA使えないのと同義だからね。 不都合が起こったところでお手上げでいいなら、コード書くだけは パソコンで文字入力できる全ての人に可能な行為だからな。
207 名前:204 mailto:sage [2014/01/19(日) 19:45:55.40 ] >>205 すみません。正解です。 最初のfornextの、終了回の変数名の打ち間違いで、 どうやら0回ループになっていたようです。 >>206 すみませんでした。
208 名前:デフォルトの名無しさん mailto:sage [2014/01/19(日) 22:34:06.31 ] 格言 「プログラムは決して思った通りには動かない。書いた通りに動くだけだ。」
209 名前:デフォルトの名無しさん [2014/01/21(火) 10:55:48.33 ] いいね♪(FB風に
210 名前:デフォルトの名無しさん mailto:sage [2014/01/23(木) 04:13:29.39 ] サブフォルダを含むpdfファイルから画像サイズだけ抜き出してセルに表示したいのですが この場合どのようにPDFファイルのmediaboxを参照すれば良いか教えてください。
211 名前:デフォルトの名無しさん mailto:sage [2014/01/23(木) 04:17:34.57 ] win7 excel2010です
212 名前:デフォルトの名無しさん mailto:sage [2014/01/23(木) 19:06:40.97 ] どういうこと?
213 名前:デフォルトの名無しさん mailto:sage [2014/01/23(木) 20:00:12.85 ] どういうpdfなんだか差し支えない範囲で見せて欲しい w
214 名前:デフォルトの名無しさん mailto:sage [2014/01/23(木) 21:15:12.64 ] というか、Excel関係ないやんw なんて言うと、例のキチガイがまたうるさそうだけど
215 名前:デフォルトの名無しさん [2014/01/23(木) 21:32:49.29 ] >>210 「VBA pdf」でググれば情報が見つかる
216 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 18:18:15.20 ] Excel 2007での質問です。 (1)特定の文字列を持つセルを詮索する。 (2)(1)で検索したセルの2セル下までの行から、特定の文字列を持つセルを検索する。 (※2セルは結合されているセルがある) ということをしたいです。 (1)で取得したセルの行や列番号を+するなりして、Findかけてやれば(2)はいいのかなぁ、と思い、 Range(Cells(......),Cells(......)).Find()〜とかやっているのですが、うまくいきません。 どう指定して検索をかけてやればでしょうか?
217 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 18:23:51.19 ] >>216 Resize使えよとは思うが、それでもできなくはないと思うが 動かんっていうコード張れ
218 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 18:34:03.11 ] つーか、計算とかVBAでの操作とか行うシートで セルの結合は使うなよ Excelは表計算だけではなくワープロ的な機能も多くて 自由度が高いけど、その自由度の高さで不適切なデータの作り方をして 不適切なデータ形式によって自分の首を絞めるバカが多すぎる
219 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 18:47:48.99 ] >>217 素早い反応ありがとうございます。 こんな感じです。 Dim cell_a As Range Dim cell_b As Range Set cell_a = Worksheets("Sheet1").Range("B:B").Find(What:="target1") Set cell_b = Worksheets("Sheet1").Range(Cells(cell_a.Row + 1, 1), Cells(cell_a.Row + 2, 1)).EntireRow.Find(What:="target2") セルの結合に関しては、そういう風なフォーマットになっているものからデータ取り出せ、って言うことなので、自分にはどうしようもないです……
220 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 19:33:28.55 ] >>219 どうしようもないってことはないはずだけどね 会社とかでも、改善の提案提言はできるんだからさ 単にそれをしないで、頭を使わずサルのように与えられたモノをそのまま使うことに慣れきっちゃってるだけで そんで、本題はおそらく Set cell_b = Worksheets("Sheet1").Range(Cells(cell_a.Row + 1, 1), Cells(cell_a.Row + 2, 1)).EntireRow.Find(What:="target2") ↓ Set cell_b = cell_a.MergeArea.Cells(1).EntireRow.Offset(1).Resize(2).Find(What:="target2") ってことじゃないかな? シート見てないから憶測でしかコード書けないけど、これでダメだってならシートうpね 漏らしちゃまずいデータは、"target1"みたいに適当な語句に置き換えていいからさ
221 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 20:06:06.50 ] >>220 うぉぉぉ…… 無事に動きました どうもありがとうございます フォーマットについては掛け合って見ます
222 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 22:39:14.10 ] Excel2013での質問です。 Do While 特定のセル.Value <> "" で特定のセルが空白だったら終了する、という処理をしようとしています。 この特定のセルが使用中とは別シートのセルだった時の記述を教えて下さい。 データを転記&計算してデータ用のシートの中身がこれ以上ない場合に止める、ということをやりたいのですが
223 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 22:53:52.87 ] >>222 Do While 別のシート.特定のセル.Value <> ""
224 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 22:58:19.12 ] >>219 ,220 Set cell_b = cell_a.EntireRow.Offset(1).Resize(2).Find(What:="target2") じゃないのか というか>>219 のコードでも動いてるっぽいけど target1が(横方向の)結合セルの場合もあるのか? だったら>>220 のコードでもダメだと思うが
225 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 23:12:51.30 ] >>223 素早いご回答ありがとうございます。 更にご質問いたしますが、特定のセル(別シート)をアクティブセルと同一座標から選びたいという時はどうすればいいでしょうか 処理を繰り返した時のアクティブセルがたまたま成績表シートC3なら、 にちゃん太郎シートC3(たまたま決まった座標)が空白の時に処理を止めるという具合です 相対参照を使うのかな?とは思うのですが……
226 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 23:59:30.44 ] どういう設計になってんだかサパーリワカンネ
227 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 00:19:28.82 ] すみません、わかりにくかったですね データシートの設計 名前 性別 国語 算数 理科 社会 愛 女 80 60 75 90 誠
228 名前:222 mailto:sage [2014/01/26(日) 00:28:45.75 ] 途中送信してもうたorz データシートの状態 出席番号 名前 性別 国語 算数 理科 社会 1 愛 女 80 60 75 90 2 誠 男 50 72 68 85 (以下何人も続くと思って下さい) 表示用シートは 出席番号 名前 性別 国語 算数 理科 社会 合計点 平均点 1 だけ入力してある状態で、 名前をデータ用から引っ張る→性別を(中略)→平均点を出す→次の行に移る→上の数字に1足した数字を入力→以下繰り返し 上記の操作を生徒のデータを全員分入力できたら(名前が空白セルになったら)終わりたいわけです わかるでしょうか? Do Whileさえうまく行けば入力自体はうまくいくことは確認済みです。 なお、上記のはやりたいことを単純化して一例で出したので、コピペしろとかそういうのはなしにしてくださいw
229 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 00:38:45.97 ] >>225 別のシート.Cells(特定のセル.Row(), 特定のセル.Column()).Value
230 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 00:39:26.01 ] 別のシート.Cells(ActiveCell.Row(), ActiveCell.Column()).Value
231 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 00:41:39.97 ] 目的が平均と合計を出したいだけ であればワークシート関数=average(,) =sum() で データシートの右端に加えればいいじゃない 表示用の見た目に書式を変えればいいじゃない
232 名前:222 mailto:sage [2014/01/26(日) 01:22:05.92 ] >>229-230 ありがとうございます!無事動作いたしました! >>231 上記のは一例で、目的が他に色々あるし……w
233 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 05:40:30.51 ] >>224 君にはまだ早いみたいだから無理するな
234 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 20:41:31.77 ] 今エクセルで作業をしてて、行き詰ってしまったんで助力お願いします フォルダ内にある.CSVファイルの行数を一つずつ取得して、それを別のブック(開いていない)のC10とC12のセルに結果を貼り付けて そのブックを新しい名前で特定のフォルダ内に保存したいです(保存ファイル名は行数を取得したファイルの名前&_assにしたい) それをフォルダ内にある.csvファイル全てに連続して処理をさせたいのですが、さすがに3000ファイルもあるとこれをしないと詰みそうです 途中までの作業はぐぐって何とかやってきましたが、ちょっとどんづまってます よろしくお願いします
235 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 21:20:37.26 ] >>234 Excelマクロ4.0を使えばブックは開かなくても済むかもね。 あと、CSVの行数取得はここに載ってた。 www.moug.net/tech/exvba/0060083.html
236 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 21:20:39.30 ] Office TANAKAさんのページだけで完成させられるじゃないか ここで質問するような形式のレスではないし、論外だと思います
237 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 22:17:46.82 ] i = 1 kannsuu1 = Worksheets("Sheet1").Cells(i, 1) kannsuu2 = Worksheets("Sheet1").Cells(i + 1, 1) Do Until kannsuu1 <> kannsuu2 i = i + 1 kannsuu1 = Worksheets("Sheet1").Cells(i, 1) kannsuu2 = Worksheets("Sheet1").Cells(i + 1, 1) Loop 上記のようであれば完走するのですが i = i + 1 の下2行を削除すると動かなくなってしまいます マクロの動きとしては Do Until でkannsuu1,2を呼び出すだけではダメで、必要であるごとにkannsuu1 = などと一度呼びだしてiの値を反映させなければいけないのでしょうか? 多分ものすごく馬鹿なことを聞いてるのだと思いますが、さしつかえなければヒントだけでもご教示ください
238 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 23:07:45.25 ] >>237 そのプログラムが正しいとすると、kannsuu1もkannsuu2も関数じゃなくて変数 名前をkannsuuにしても関数にはならない
239 名前:デフォルトの名無しさん mailto:sage [2014/01/28(火) 01:37:20.21 ] >>237 >>238 の言うとおり、kannsuu1やkannsuu2はセルの値を入れる「変数」。 変数っていうのはプログラマの意図に反して勝手に中身の値が変わられると困る (そもそもある値を一時的に保持しておく目的で変数というものが存在する)ので、 プログラム的に指示がない限り、勝手に中身が書き換わることは普通はない。 なのでそのコードは、A列のi行目と(i+1)行目のセルの値が一致する箇所を発見するまで A列を上から下へ走査するという目的のコードであるなら、 間違いではない(最善ではないかも知れない)。 むしろ6、7行目を消そうとする理由が知りたい。
240 名前:デフォルトの名無しさん mailto:sage [2014/01/28(火) 01:54:30.04 ] >>237 i = 1 k1 = 0 k2 = 0 while k1 = k2 ..k1 = cells(i+0,1) ..k2 = cells(i+1,1) ..i + 1 loop または i = 1 while cells(i+0,1) = cells(i+1,1) ..i + 1 loop debug.print cells(i+0,1), cells(i+1,1)
241 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 21:02:33.55 ] win 7 excel 2013なんですけど、 配列の数を取得するにはどうすればいいんでしょうか UBoundって入力しても補完で出てこないし、 オブジェクトブラウザーで調べてみても存在していないんですが
242 名前:デフォルトの名無しさん [2014/02/04(火) 21:53:17.23 ] >>241 HELP参照するか、ググルと沢山有る
243 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 22:49:10.29 ] 教えてくれんのですか ググり力を鍛えなければなぁ
244 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 01:40:01.47 ] office2013のリファレンスみたけどUBoundはあった でも、やっぱ俺の環境にはUBoundねーぞ UCaseはあんのにどういうこっちゃ
245 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 03:55:50.64 ] うちの2007でもUBound,LBoundは補完されないな オブジェクトブラウザにもみつからない でも普通に使えるしヘルプはF1で参照できる WordやACCESSでも同じだったから、VBEの問題かもね
246 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 05:28:39.22 ] 2010でもUbound補完されない けど気にせず入力しちゃえば普通に使える
247 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 20:25:50.87 ] 使えました! 補完出ないとかありえなくないですかw?
248 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 20:37:29.17 ] ところで、VBA初めてなんですが、 Javaでいうリスナーを動的に設定するには何かいい方法ありますか? text_ChangeAfter みたいなところに記述するのは、 数が増えると大変なので エクセルテーブルにコンポーネントとそれに対する処理方法を記載しておいて、 例えば、郵便番号textには郵便番号処理(4桁目に-を挿入)をやらせるとかしたいです
249 名前:デフォルトの名無しさん [2014/02/05(水) 20:37:50.41 ] 他にも補完が効かないものもあるからなぁ datediffとか まだ他にもあるんかな
250 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 20:57:01.65 ] >>246 UBoundは「関数」でなく「構文」だ。文字の色を見ろ。 >>248 Excelでコードを半自動生成すると捗る。 Private Sub TextBox5_Change(): Call 処理8(TextBox5): End Sub Private Sub TextBox6_Change(): Call 処理3(TextBox6): End Sub
251 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 21:16:07.29 ] >>250 大変興味深いです でも、それはやっぱり TextBox5_Changeメソッドに記述するという方法になってしまいますか?
252 名前:デフォルトの名無しさん mailto:sage [2014/02/05(水) 22:30:17.57 ] テキストボックスに入力した文字列をシート内から検索できるようなVBAをWEBで見つけました。 (テキスト入力→ボタンを押す→検索される) Sub ボタン1_Click() On Error GoTo エラー処理 '検索文字が見つからなかったときはエラー処理へジャンプ Cells.Find(What:=TextBox1.Value, LookAt:=xlPart).Activate'シート全体を対象に検索 TextBox1.Value = "" 'テキストボックスの入力文字を消去 Exit Sub '検索文字が発見できた場合はここで終了 エラー処理: MsgBox "見つかりませんでした" TextBox1.Value = "" End Sub この場合、同じ文字列が複数有る場合、2つめ以降が検索できません。 2つめ以降を検索できるようにするにはどうすれば良いでしょうか?