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


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

Excel VBA質問スレ Part6



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
おの後ろはカンマにしたかったのか。
それは実装できてないわ。
まぁ、ドットで区切って、並び替えて、再結合は実現しているので、
あとは別に苦労しないだろ。






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

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

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