- ベストアンサー
300個の文字列を結合し1個のセルに
ファイル名変更ソフト「Namery」に使うのですが、セル1個に 001> 001a|002> 001b|003> 001c|004> 002a|005> 002a|006> 002c このようにして 300> 100c| までの文字列つくれませんか? VBAをお願いしたいのです。あるいは下記のD1からD300のセルの文字列を合体してE1に表示、でも良いのですが。 VBAを知らないので、次のような作業を始めましたが途中で疲労困憊です。 A1に001をいれオートフィルでA300までつくり B1に半角スペース+001a B2に半角スペース+002b B3に半角スペース+003c としてから 100c迄オートフィルし C1 に=CONCATENATE(A1,B1) C1をコピーD1に「値のみ貼り付け」してからオートフィル。 出来たD1からD300の文字列を1セルの文字列にするために、エクセルの30個までの制限のため何段階にも作業を分けなければなりません。 ファイル名変更ソフト=Namery の[連続置換・正規表現]に文字列を入れ目的を果たしたいのです。 http://www.vector.co.jp/soft/win95/util/se217399.html
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#5補> >或るセル(例A2) にスタートしたい番号(045) >別のセル(例A3)に人数(12)を入力して必要文字列を生成 のように#1を書き直してみました ---------------------------------------------------------------- Public Sub makeStr() Dim 人数 As Integer Dim 開始番号 As Integer Dim i As Integer Dim cat As String 人数 = Range("A3").Value 開始番号 = Range("A2").Value cat = "" For i = 0 To 人数 * 3 - 1 cat = cat & Format(i + 1, "000") & "> " & Format(Int(i / 3) + 開始番号, "000") & Chr(Asc("a") + i Mod 3) & IIf(i < 人数 * 3 - 1, "|", "") Next Range("A1").Value = cat End Sub
その他の回答 (5)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>例えば12枚(001から012)のデジカメファイルを目的のファイル名 045a,045b,045c から名づけたい場合 つまり、 今回の質問に合わせて言えば、 001> 045a|002> 045b|003> 045c|004> 046a|005> 046b|006> 046c… のようにしたいということでしょうか?
補足
再接を感謝します ありがとうございました。 希望を整理します。 まず以下のように仮定します。 001a=001さんの左顔 001b=001さんの右顔 001c=001さんの正面 とした場合 現在44人分の撮影が終了してます。カメラは撮影毎に001.jpg からスタートし、1回の撮影が5人だったり50人だったり、するとします。 さて、45人目から撮影が始まり今回は12人分(56人迄)写しました。次回は57人目からスタートです。---とこの様に考えると、いっその事 或るセル(例A2) にスタートしたい番号(045) 別のセル(例A3)に人数(12)を入力して 必要文字列を生成できれば便利だと考えました。 強いて限界を作れば 120人まで=100人目からスタートで20人分の写真です。
- imogasi
- ベストアンサー率27% (4737/17069)
#3の補足。 (1) (私)>もし初めを001> 001aにするならs = ""をs = "100> " 〔補足)>s="100"の時"100001a|001>001b と違っています。 (2) >(補足)>001bの文字列で始まり001a| が消え (私)100の後に>が入ってない((1)の理由から)の為にそう燃えるだけで、少しのコードの修正で直る。 (3) 〔補足)>文字列最後が 299>100c|300>となり300)が余分です 〔私)最後の Range("A1").Value = s をRange("A1").Value = Mid(s,1,len((s)-300) などに修正して、直りますか。 ーー (私)私は、文字列ができた後の質問の用途や、ソフト「Namery」についてわかっていないので、完全ではなかったかもしれませんのですみません。 ご質問者側で、最初と、後尾部分は修正してもらえると思ってました。 既に#1のご回答があったが、a,b,cの部分とIIFの部分で私ならこのほうが判りやすいかな、という点を言いたかっただけでした。
- imogasi
- ベストアンサー率27% (4737/17069)
Public Sub makeStr() Dim i, j, k As Integer c = Array("a", "b", "c") Dim s As String s = "" For i = 0 To 300 - 1 k = (i Mod 3) j = Int(i / 3) + 1 s = s & Format(j, "000") & c(k) & "|" & Format(i + 1, "000") & ">" Next i Range("A1").Value = s End Sub もし初めを001> 001aにするなら s = ""をs = "100> " もっと先まで連ねるなら For i = 0 To 300 - 1の300を増やしてください。
お礼
始めにこちらを見ましたので、補足欄に書込みしましたが、 NO1のご回答でうまく行きました。 でも重ねてお礼を申し上げます。 ありがとうございました。
補足
出来ました!! ありがとうございます 質問側に難とコピーが悪いのか以下の結果です。 1)生成文字列先頭がs=""の時"001a|001>001b s="100"の時"100001a|001>001b となり001bの文字列で始まり001a| が消え 文字列最後が 299>100c|300>となり300)が余分です。”が先頭にありますが、最後尾に無くてもBVAではよいのでしょうか? またご回答の[”]は[半角二重引用符始め]ですが引用符の始・終別は必須ですか? 2)>とabcの着いた文字列の間の半角スペースがない。 3)まずxxxa,xxxb,xxxc が存在してまして、質問の001は便宜上のなまえです。3種100組の撮影を10日に分けてする場合、例えば12枚(001から012)のデジカメファイルを目的のファイル名 045a,045b,045c から名づけたい場合うまい方法ありますか? 今怪しげな暗算で45x3などとしてから土台の001を135か?132?かに変えてから----何しろ現状では先頭文字の045aが生成できないので----こんらんしてます。
- mshr1962
- ベストアンサー率39% (7417/18945)
数式で行う場合は下記の式を001aにしたいセルに入力して下方にコピー =TEXT(INT((ROW(A1)-1)/3)+1,"000")&CHAR(MOD(ROW(A1)-1,3)+97) 横方向に展開の場合はROWをCOLUMNに置き換えてください。
お礼
手入力でabcの3行を作らないでも A1に式挿入で その1行を下へオートフィルで出来ると言う事ですね。 ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
'こんな感じでどうでしょう Public Sub makeStr() Dim i As Integer Dim cat As String cat = "" For i = 0 To 300 - 1 cat = cat & Format(i + 1, "000") & "> " & Format(Int(i / 3) + 1, "000") & Chr(Asc("a") + i Mod 3) & IIf(i < 300 - 1, "|", "") Next 'Debug.Print cat Range("A1").Value = cat End Sub
補足
出来ました!!! ありがとうございました。NO3のご回答が一番上だったものでそこで試行錯誤 スキルない私は 大変時間をかけてしまい、こちらに来るのが遅れましたが、完璧です。感謝申し上げます。 さらに欲で、NO3の所にもカキコしたのですが、例えば「045aからにしたい」と名づけたい文字列名の先頭名を指定することは出来ないでしょうか? といってもそれは[Namery]の範疇,,,,,,, 現状では デジカメNO 001をまず(45x3-3=)133からの連番に[Namery]ソフトで置き換えてから、ご案内いただいた生成文字列をNameryの[連続置換・正規表現]に挿入して成功しています。
お礼
出来ました ! 完璧です ヤッホー と歓喜です ありがとうございました。心より感謝申し上げます。 では ごめんくださいませ。 深い 敬意を込めて,,,,,,,