1 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 19:31:39 ] ExcelのVBAに関する質問スレです 質問前に 【 >>2-3 】 あたりを良く読むこと 前スレ pc11.2ch.net/test/read.cgi/tech/1197448064/ ★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 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
82 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 13:23:59 ] Dim hogehoge(999) As String '関数呼び出し method(hogehoge) --------------------------------------------- '関数実体 sub method(hogehoge() As String)
83 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 17:19:36 ] トリビア 明示的という日本語は存在しない
84 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 17:33:50 ] そんなしょうもねぇ揚げ足とるくらいなら糞して寝てろや・・・
85 名前:デフォルトの名無しさん [2008/03/20(木) 17:48:37 ] 普通に戻り値だと strTEXT = method(hogehoge) 実行したいだけだと call method(hogehoge) と使ってきたので、なぜと言われても困るなぁ…
86 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 18:13:15 ] 要は戻り値がないメソッドを呼ぶときは 明示的にCallステートメントをメソッド名の前に付けなくてはならないという 暗黙の了解がVBAにはあるわけだ。あざーす
87 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 18:15:06 ] >>83 あるよ
88 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 18:35:11 ] 言葉は生きてて、時代などを反映して生まれては消える。 広辞苑か何かに追加されてないといけないのか?
89 名前:デフォルトの名無しさん [2008/03/20(木) 18:38:11 ] >>86 VBAは初めて? 普段は何で書いてるの?
90 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 18:48:11 ] >89 ヒミツのアッコちゃん
91 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 18:57:23 ] ネタだと思ったが ヒミツのアッコちゃん っつー言語は本当にあるんだな 織田信長の乗りだな
92 名前:デフォルトの名無しさん [2008/03/20(木) 21:32:16 ] >>76 さん できました、ありがとうございます。
93 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:01:16 ] method(hogehoge)だとhogehogeに()をつけてからmethodに渡すと解釈するからじゃなくて? もしそうなら、methodと括弧の間に空白が置かれていると思うし、method hogehogeで呼べるはずってことだけど。
94 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:02:30 ] 日本語でおk
95 名前:デフォルトの名無しさん [2008/03/20(木) 23:17:53 ] 日本語だとVBAが走りません
96 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 02:21:41 ] メソッド(ほげほげ)
97 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 05:40:24 ] 漏れは括弧を付けて呼びたいのに 勝手に括弧を消されるのが気に入らない
98 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 06:04:35 ] かっこわるい
99 名前:デフォルトの名無しさん [2008/03/21(金) 08:32:13 BE:168148962-2BP(380)] valueやformulaはコピ〜されるのですが Numberformat がコピ〜されません なにが悪いのでしょう? With oThisSheet .Rows(p_row + cnt).Value = .Rows(p_eval_row + 1).Value .Rows(p_row + cnt).FormulaR1C1 = .Rows(p_eval_row + 1).FormulaR1C1 .Rows(p_row + cnt).NumberFormat = .Rows(p_eval_row + 1).NumberFormat .Rows(p_row + cnt).FormulaR1C1Local = .Rows(p_eval_row + 1).FormulaR1C1Local .Rows(p_row + cnt).NumberFormatLocal = .Rows(p_eval_row + 1).NumberFormatLocal End With
100 名前:デフォルトの名無しさん [2008/03/21(金) 12:11:13 ] dim name as string name=range("a1") if name=textbox1 then msgbox("有") end if このtextbox1の入力 大文字 小文字でも 認識させたいのですが どう処理したらいいのでしょか? 例えば range("a1")のデータが a0001 textbox1の入力がA0001 この場合もmsgbox(”有”)と拾ってもらいたいのですが・・・
101 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 12:14:06 ] >>100 なんとなく違う回避方法もある気がするが、 StrConv で、小文字に統一してから比較する
102 名前:デフォルトの名無しさん [2008/03/21(金) 12:37:55 ] StrConv の使い方は フォ-マットですか? それとも、dim name as StrConv と書くのでしょか?
103 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 12:47:16 ] ヘルプ読め
104 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 13:17:57 ] >>100 if name=textbox1 then →If StrComp(name, textbox1, vbTextCompare) = 0 then ところで、msgboxの()は必要なの?
105 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 13:18:39 ] msgbox("変数同士は大文字小文字関係なく比較するのだが、" & vbnewline & _ "textboxは厳密に判定するのか?") ' 実際にtextboxを配置してみての実験はしていない
106 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 13:20:41 ] if lcase(name) = lcase(textbox1.text) then でいいんじゃあるまいか。
107 名前:デフォルトの名無しさん [2008/03/21(金) 14:56:57 ] 100です。皆様ありがと御座います。 本当はmsgbox()のところは、分かりやすく質問させてもらうため 簡単に仮に置いただけです。 本当は FOR EACH と組み合わせて、膨大な数あるデーターの中から 対象データを抜き出したいのです。 今のコードは下記の様に書いてるのですが、 Dim name As String name = textbox1.text Dim 範囲, 名前 Set 範囲 = Range("a1:z10000") For Each 名前 In 範囲 If 名前.Value = name Then 名前.Select end if 全てがそろってないと拾ってくれず、半分手作業状態で困ってました。 一応、上記コードでやって見ましたが、for each とうまくかみ合いません 再び、ご教授お願いします。
108 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 15:28:00 ] 最初からやりたいことを書きましょう。 dim 範囲 as range, 名前 as range set 範囲 = range("a1:z10000") set 名前 = 範囲.find(textbox1.text, lookat:=xlwhole) if not 名前 is nothing then 名前.select end if
109 名前:デフォルトの名無しさん [2008/03/21(金) 15:57:09 ] 大文字と小文字全て一致してないと、拾ってくれません。 もうちょっと、いじくってみます。
110 名前:デフォルトの名無しさん [2008/03/21(金) 16:33:11 ] 原因が分かりました。 半角の小文字aと全角の小文字aの違いが有ると拾わないみたいです。
111 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 17:18:17 ] >>110 StrConv
112 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 17:23:52 ] 永久ループ
113 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 18:07:08 ] トリビア 明示はサ変名詞なので的が付く対象ではない したがって明示的というのは日本語風の言語使用方法に過ぎない
114 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 21:14:50 ] >>113 なぜサ変名詞に的がついてはいけないの?
115 名前:デフォルトの名無しさん [2008/03/21(金) 23:06:23 ] VBAでオラクルのテーブル読めますか?
116 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 23:57:02 ] よんだことあるけどしるか!ってかんじ
117 名前:デフォルトの名無しさん [2008/03/22(土) 00:37:29 ] >>115 excelからやると結構面倒 その辺になるとACCESSのほうがいいかも。 ODBC経由でオラクルのテーブルをリンクできるようにしてから、openrecordsetすれば簡単
118 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 00:43:43 ] oo4oってもうないんだっけか
119 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 12:49:32 ] Oracleに接続するぐらい別に面倒じゃない VBSからでも使える程度のよくあるケース
120 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 13:54:20 ] VBAってさぁ、ソース丸見えなんだけどさ見えなくできないの?
121 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 14:51:54 ] パスワードをかければ、カジュアルなプロテクトはできる。 ただし、はずし方もググればすぐにわかるんだけどね・・・
122 名前:デフォルトの名無しさん [2008/03/22(土) 15:59:13 ] 当方環境 【OS】WinXP Home 【バージョン】Excel2002 質問させて頂きます。 数あるレコードの中から番号を選択して、内容を反映させたデータ閲覧用フォーム2を表示させています。 画面で見るだけではなくそれを印刷に流用できればと考えましたので、用紙サイズをA4・印刷方向を横に設定する以下の記述を追加しました。 Private Sub CommandButton3_Click() UserForm2.PrintForm Printer.Orientation = vbPRORLandscape Printer.PaperSize = vbPRPSA4 End Sub 実行すると印刷はされるものの、A4縦で印刷されてしまいました。 A4横に設定するには、どのように記述すればよろしいのでしょうか? ご存知の方いらっしゃいましたら、宜しくご教示お願いします。
123 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:48:45 ] ググッたらこんな使い方してたみたいだけど? Forms("フォーム名").Printer.Orientation = acPRORLandscape それかプリンターの設定で縦になってるから云々とか
124 名前:デフォルトの名無しさん [2008/03/23(日) 01:50:42 ] 1ヶ月の超初心者です、教えて下さい。 条件分岐でそれぞれの製品(4製品)が5000以上になったらOKになるようにしたいのですが どう書けばいいのでしょうか?それぞれの時の書き方が分かりません。D4:F7 は範囲です。 宜しくお願いします。 If Range("d4:f7").Value >= 5000 Then msgbox"ok" Selection.Value = "ok" Else Selection.Value = "no"
125 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 02:23:53 ] 質問の内容がよくわからない。4製品?何に対しての? 5000以上っていうのはD4:F7全ての合計なのか 1個1個のセルの値が5000以上なのかなど
126 名前:デフォルトの名無しさん [2008/03/23(日) 02:53:39 ] 4製品というのは例えばストーブ、掃除機、時計、テレビで 1個1個のセルの値が5000以上になるものです。合計は全く関係ありません。 4製品の全ての値が5000(円)以上になっているものに対してOKになるようにしたいのですが。 説明が下手ですみません。
127 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 03:05:48 ] D4:F7って9セルあるけど?4製品?
128 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 03:15:07 ] 9セルじゃなくて12セルか
129 名前:デフォルトの名無しさん [2008/03/23(日) 03:16:31 ] すみません。金額の範囲はC4:F7でした。16セルです。
130 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 03:53:41 ] これでおk? '対象のワークシートを変数wkに格納 Set wk = Worksheets("Sheet1") '対象のワークシートの範囲の開始("C4")から終了("F7")までを変数currentCellにセットしてループ For Each currentCell In wk.Range("C4:F7") '対象のセルの値が5000以上だった場合 If currentCell.Value >= 5000 Then currentCell.Value = "ok" End If Next currentCell
131 名前:デフォルトの名無しさん [2008/03/23(日) 04:11:38 ] ご親切にどうもありがとうございました。
132 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 15:54:55 ] ちょっとスレ違いかもしれませんが、教えてください。 以下のようにマクロを使わず、セルに入ってるデータをセルの位置として 指定して計算させたいのですが可能でしょうか? SUM(A1のデータ:A2のデータ) 例えば、以下のようにデータが入力されているとき、 A1のセルに"B1" A2のセルに"B10" マクロを使わずSUM(B1:B10)が行われるようにするにはどうすればよいでしょうか?
133 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 16:14:10 ] indirect()
134 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 16:20:33 ] >>133 おー!ありがとうございます!!
135 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 23:10:05 ] Excelを他のプログラムからCreateObjectして操作するときに、 そのEcelのオブジェクトのApplicationからメッセージボックスを 表示するようなことはできますか?Excelにマクロを定義しといて 呼び出すという方法じゃなくて、直接メッセージを表示するような ことがやりたいです。
136 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 01:20:08 ] できる
137 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 01:29:29 ] そのためにわざわざExcel使うか?
138 名前:デフォルトの名無しさん [2008/03/26(水) 21:19:57 ] 質問です。 VBAの処理のみでAccessに依存することなく、Accessのデータテーブルから エクセルのシートにデータ内容をExportしたり、エクセルのシートの内容をデータベースに Importすることはできるのでしょうか?
139 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 23:03:13 ] >Accessに依存することなく、Accessのデータテーブルから ???
140 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 23:20:00 ] >>136 どのオブジェクトの何というメソッドを使うのか教えていただけないでしょうか。
141 名前:デフォルトの名無しさん [2008/03/26(水) 23:59:32 ] 138です。 Accessを使ってシートにデータをExportをしますが、Accessは使わずにVBAの 機能のみでシートにデータを取り込みたいです。
142 名前:デフォルトの名無しさん [2008/03/27(木) 00:16:40 ] excelのvbaだけでは無理
143 名前:デフォルトの名無しさん [2008/03/27(木) 00:39:27 ] 質問です。 WindowsXP Excel2000を使っています。 Excel VBAで、画像ファイル(.jpgとか.tifとか)をビューアなどで開かず、 直接印刷する方法を教えてください。 単純に印刷するだけならシェルを使って何とかなったのですが、 用紙サイズや向きの指定をしたく、その方法がまったくわかりません。 よろしくおねがいします
144 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 07:01:01 ] >>138 >>141 ADOとかDAOを使えばそんな感じの事はできる インポート/エクスポートとはちょっと違うけど
145 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 11:30:02 ] セルをマウスでセレクトして外側は太い罫線、中は細い罫線をひくというような 共通で使えるVBAを作ったのでエクセルを開くたびに常にそのVBAを読み込みたいです。 現在は***.vbaファイルを保存しておき、そこからxlaファイルにしてそれをアドオンでエクセル起動時に読ませています。 これだとVBAを修正するときは、 新規でエクセルを立ち上げ ↓ VBEで***.vbaを読み込み ↓ 編集後別名のxlaファイルに保存(同一ファイルはエクセル起動時に開かれるのでさわれない為) ↓ エクセルを閉じ、作ったxlaファイルを設定しているxlaファイルに置き換え と面倒な事になっています。※xlaファイルはダイレクトに編集できないようだ みなさんは作ったVBAをどのように管理していますか?
146 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 13:17:35 ] つ個人用マクロブック
147 名前:デフォルトの名無しさん [2008/03/27(木) 18:33:14 ] QueryTables.Add()メソッドで Connection情報を指定する際に Jet OLEDB:Engine Type=? ?に対してはどんな値を指定するのが妥当なんでしょうか? ちなみに↓を見てたのですが全く意味がわかんなかったんです。。 www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado_11.aspx
148 名前:147 mailto:sage [2008/03/27(木) 20:55:55 ] ちなみに OLE DBプロバイダを使用して あるExcelファイルのシートのデータを 新規シートへコピーするのをやろうとしてます。
149 名前:デフォルトの名無しさん [2008/03/27(木) 21:06:00 ] >>144 さん ADOを調べて public sub toridasi() Dim cnn as NEW ADODB.Connection Dim rs As NEW ADODB.Recordset set cnn = NEW ADODB.Connnection cnn.Connection String = _ 略 略 cnn.Open set rs.Open Source = 略 といった感じでやったらできました。 質問なのですが今度はデータベースから取り込むのではなく、 Excelのシートの内容をデータベースに書き込むにはどうしたらいいですか?
150 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:34:35 ] >>149 まあこの辺見るとかググるとかして頑張ってください ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130.html
151 名前:デフォルトの名無しさん [2008/03/27(木) 23:00:59 ] 指定フォルダ内の複数ファイルに対して 文字列の置換処理をしたいのですが どのように書けばいいのでしょうか?
152 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 23:07:35 ] ファイル開く→置換
153 名前:デフォルトの名無しさん [2008/03/27(木) 23:11:07 ] >>150 さん このサイトは見たことがありますが参考になりませんでした。
154 名前:デフォルトの名無しさん [2008/03/28(金) 00:43:16 ] >>153 そこに書いてあることが理解できない段階なら、 まじめにVBAの本を買って、勉強したほうがいいんじゃないかなと思う。
155 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 02:24:22 ] >>153 DAOで、試験的にやってみました。 あらかじめ、TEST.mdbの中に「受注」テーブルがある場合です。 ワークシート「受注」の4行目から9行目までを新規レコードに追加します。 Sub Data_Export() Dim WS As Worksheet, r As Long Dim db As Database, rs As DAO.Recordset Set WS = Worksheets("受注") Set db = OpenDatabase(ThisWorkbook.Path & "\TEST.mdb") Set rs = db.OpenRecordset(Name:="受注", Type:=dbOpenDynaset) For r = 4 To 9 With rs .AddNew .Fields("日付").Value = WS.Cells(r, 2).Value .Fields("顧客名").Value = WS.Cells(r, 3).Value .Fields("注文番号").Value = WS.Cells(r, 4).Value .Fields("品名").Value = WS.Cells(r, 5).Value .Fields("単価").Value = WS.Cells(r, 6).Value .Fields("数量").Value = WS.Cells(r, 7).Value .Update End With Next r db.Close End Sub 参考になればよいですが。
156 名前:155 mailto:sage [2008/03/28(金) 04:48:08 ] ちょっと修正 Next r の次から --------------------------- rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub ---------------------------
157 名前:145 mailto:sage [2008/03/28(金) 10:03:57 ] >>146 ありがとうございます。 個人用マクロ調べてみました。 これだと下記にファイルを置かれてしまうようなのですが、 管理するマクロファイルは任意の場所に置いて管理したいです。 C:\Program Files\Microsoft Office\Office\XLStart 何か方法はありますでしょうか。
158 名前:デフォルトの名無しさん [2008/03/28(金) 18:33:56 ] >>157 俺は ツールバーにマクロのコマンド作る
159 名前:135 mailto:sage [2008/03/28(金) 23:15:33 ] 135なのですが・・・結局できないわけですか・・・。
160 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 00:13:38 ] 余裕でできる
161 名前:デフォルトの名無しさん [2008/03/29(土) 00:25:20 ] >>135 何で困ってるのかさっぱりわからん。
162 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 01:48:52 ] application.assistant.doalert or 余裕 application.executeexcel4macro "alert(...)" or さらに余裕 application.executeexcel4macro "call(""user32"",""messagebox"",..." or さらにさらに余裕 ...
163 名前:デフォルトの名無しさん [2008/03/29(土) 12:35:12 ] >>135 もっと何をしたいのか具体例を挙げてくれないと 出来るとしか答えられん。
164 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 15:01:22 ] >>163 < >>162
165 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 15:23:42 ] >>161 >>163 >>140 まあ一応>>162 で答え出てんじゃね
166 名前:デフォルトの名無しさん [2008/03/30(日) 19:16:39 ] OS WindowsXP Excel 97 で、 a1.a2.a3.….an を an,a1.….a(n-1) と並べ替えるにはどうしたらいいんでしょうか。 a1〜anは英数字、カタカナ、漢字です。 よろしくお願いします
167 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:05:33 ] >>166 an
168 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:06:16 ] みすったorz anをa1のセルに移動(insert)するだけでいいんじゃないのか? ってかXPでなんで97なんだ?
169 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:06:21 ] エスパーさん、出番ですよ
170 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:12:14 ] vbaじゃなくて並び替えですることだろ
171 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:24:37 ] 手早いレスありがとうございます。 >>168 一つのセルの中に「.」で区切られた状態で入っているので・・ 97なのはwin95のPCで読めるようにしてたのかと。。 >>170 どのようにすればいいんでしょうか
172 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:26:48 ] >>171 それは本当にVBAでやらなきゃならんことなのか? 後ろから「,」を検索してその位置以降の文字列を前に持ってくるだけだろ? Excelの関数で事足りると思うのだが?
173 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:29:22 ] >>172 並び替え以前は全て「.」で区切られているので・・ またデータが大量にあるためマクロで処理したいです。
174 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 23:35:03 ] >>173 1.関数で別シートに写像 2.シート全体を選択してコピー→値の貼り付け
175 名前:デフォルトの名無しさん [2008/03/30(日) 23:36:48 ] >>166 あ.い.う.え.お と並んでいるものを、 お.あ.い.う.え と並べたいのか? お.え.う.い.あ と並べたいと言う意図だとan,a1.….a(n-1) はおかしいし・・・ 意味が分からん。
176 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 23:44:36 ] たくさんのcell内のデータを並びかえるのだから 自前でsort関数つくるのがいいだろ
177 名前:デフォルトの名無しさん [2008/03/30(日) 23:46:51 ] >>175 俺も意味が判らんかったが、そういう意味で解釈すると、こうかな? Function test() Dim LastStr As String Dim maxy As Long maxy = 5 LastStr = Range("A" & maxy) For i = maxy To 2 Step -1 Range("A" & i) = Range("A" & i - 1) Next Range("A1") = LastStr End Function
178 名前:デフォルトの名無しさん [2008/03/30(日) 23:48:43 ] >>177 並べ替えたいものは「1つのフィールドに入っている」んじゃないか?
179 名前:デフォルトの名無しさん [2008/03/31(月) 00:01:58 ] >>178 そういう意味? ならこれでどうだ? Function test() Dim baseText As String Dim KekkaText As String Dim varStr() As Variant Dim i1 As Long, i2 As Long Dim maxy As Long ' baseText = "あいうえお.aiueo.アイウエオ.アイうえオ.aiウエお" i2 = 0 ' ReDim Preserve varStr(i2) As Variant For i1 = 1 To Len(baseText) If Mid(baseText, i1, 1) = "." Then i2 = i2 + 1 ReDim Preserve varStr(i2) As Variant Else varStr(i2) = varStr(i2) & Mid(baseText, i1, 1) End If Next ' KekkaText = varStr(UBound(varStr)) For i1 = 0 To (UBound(varStr) - 1) KekkaText = KekkaText & "." & varStr(i1) Next ' MsgBox (KekkaText) End Function
180 名前:デフォルトの名無しさん [2008/03/31(月) 00:21:21 ] いいんじゃね? あとは自作関数化すれば何セルあっても動作するするだろ それくらいは自分でなんとかすればよし、というところか。
181 名前:166 mailto:sage [2008/03/31(月) 00:39:56 ] >>174 どうもです >>175 あ.い.う.え.お と並んでいるものを、 お,あ.い.う.え です。 「お」の後がコンマになってます。 >>177-180 ありがとうございます。 おきてからやってみます
182 名前:179 [2008/03/31(月) 00:48:02 ] >>181 おの後ろはカンマにしたかったのか。 それは実装できてないわ。 まぁ、ドットで区切って、並び替えて、再結合は実現しているので、 あとは別に苦労しないだろ。