• ベストアンサー

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

noname#245250
noname#245250

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.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

noname#245250
質問者

お礼

  出来ました ! 完璧です  ヤッホー と歓喜です ありがとうございました。心より感謝申し上げます。 では ごめんくださいませ。 深い 敬意を込めて,,,,,,,

その他の回答 (5)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>例えば12枚(001から012)のデジカメファイルを目的のファイル名 045a,045b,045c から名づけたい場合 つまり、 今回の質問に合わせて言えば、 001> 045a|002> 045b|003> 045c|004> 046a|005> 046b|006> 046c… のようにしたいということでしょうか?

noname#245250
質問者

補足

再接を感謝します ありがとうございました。 希望を整理します。 まず以下のように仮定します。 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/17068)
回答No.4

#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/17068)
回答No.3

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を増やしてください。

noname#245250
質問者

お礼

始めにこちらを見ましたので、補足欄に書込みしましたが、 NO1のご回答でうまく行きました。 でも重ねてお礼を申し上げます。 ありがとうございました。

noname#245250
質問者

補足

 出来ました!! ありがとうございます 質問側に難とコピーが悪いのか以下の結果です。 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% (7418/18948)
回答No.2

数式で行う場合は下記の式を001aにしたいセルに入力して下方にコピー =TEXT(INT((ROW(A1)-1)/3)+1,"000")&CHAR(MOD(ROW(A1)-1,3)+97) 横方向に展開の場合はROWをCOLUMNに置き換えてください。

noname#245250
質問者

お礼

手入力でabcの3行を作らないでも A1に式挿入で その1行を下へオートフィルで出来ると言う事ですね。 ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

'こんな感じでどうでしょう 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

noname#245250
質問者

補足

出来ました!!! ありがとうございました。NO3のご回答が一番上だったものでそこで試行錯誤 スキルない私は 大変時間をかけてしまい、こちらに来るのが遅れましたが、完璧です。感謝申し上げます。 さらに欲で、NO3の所にもカキコしたのですが、例えば「045aからにしたい」と名づけたい文字列名の先頭名を指定することは出来ないでしょうか? といってもそれは[Namery]の範疇,,,,,,, 現状では デジカメNO 001をまず(45x3-3=)133からの連番に[Namery]ソフトで置き換えてから、ご案内いただいた生成文字列をNameryの[連続置換・正規表現]に挿入して成功しています。

関連するQ&A

  • エクセルの文字列中の指定した位置の文字列の置き換え(REPLACE)。

    エクセルの文字列中の指定した位置の文字列の置き換え(REPLACE)。 エクセルのセルA1に 「A123B1234X9876C123DD」と入力されています。 これを 「A123-B123X9876-C123-DD」としたいです。 現在 ・B1のセルに=REPLACE(A1,5,0,"-") ・C1のセルに=REPLACE(B1,15,0,"-") ・D1のセルに=REPLACE(C1,20,0,"-") と入れて、D1にできた値の 「A123-B123X9876-C123-DD」 をコピーして E1のセルに「形式を選択して貼り付け」「値」で貼り付けして B1~D1を削除して ・A1のセルには元の「A123B123X9876C123DD」 ・B1のセルには編集後の「A123-B123X9876-C123-DD」 が表示されるようにしています。 このA列が100行もあるとうんざりです。 式をオートフィルでコピーしていくのですが  ・B1に式を入れてオートフィルでB100までコピー  ・C1に式を入れてオートフィルでC100までコピー  ・D1に式を入れてオートフィルでD100までコピー  ・D1~D100をコピーしてE1~E100に「形式を選択して貼り付け」「値」で貼り付け  ・B,C,D列を列削除  3回は式を入れないといけないです。一発で編集する方法はありますでしょうか?

  • エクセルの文字列結合

    ご存知の方がいらっしゃいましたらよろしくお願い致します。 エクセルの文字列でA1のセルに「あ」と入れて、 B1のセルに「い」、C1のセルに「う」と入力して、 D1のセルに「A1&B1&C1」という数式を立てれば D1のセルは「あいう」となるのですが、 A1のセルに「あ」と入力して B1のセルに「0001」と半角で入力し、C1のセルに 「A1&B1」という数式を立てれば C1のセルが「あ1」となってしまいます。 そこでC1のセルを「あ0001」とするには どうしたらよろしいでしょうか? 0001は0002、0003・・・と続いていくため、 文字列扱いにはできません。 なんとかして A1に「あ」B1に「0001」C1のセルを自動で「あ0001」 A2に「あ」B2に「0002」C2のセルを自動で「あ0002」 A3に「あ」B3に「0003」C3のセルを自動で「あ0002」 としたいのです。よろしくお願い致します。

  • Excelのセルの結合

    いつもお世話になっています。 エクセルのA列の文字列とB列の文字列を合体させる方法はありますか? 1000行くらいあるので コピーしていたら大変なのです。 例) A1のセルの文字列 あい B1のセルの文字列 うえお C1に あい うえおと表示させる。←これがやりたい できれば Aの文字とBの文字の間に半角スペースを入れたいのですが・・・。 よろしくお願いします。 

  • 複数のセルの文字列を;(セミコロン)を介してひとつのセルに文字列として結合するには?

    エクセルで以下のような事は出来るのでしょうか? 複数のセルの文字列を;(セミコロン)を介してひとつのセルに文字列として結合するには? 例) A  B  C     D    あ  い  う  →  あ;い;う ひょっとしたら同じような質問が無いかと思い、色々と探してみたのですが、見つけることが出来ませんでした。 大量のデータを入力する必要があり、大変困っています。 ご存知の方がおられましたら、ご教授頂けるとありがたいです。 宜しくお願いいたします。

  • 【VBA】 文字列の中から指定の文字列を取り出す

    VBAで文字列から指定の文字のn番目からn+1番目までの文字列を取り出すことは可能でしょうか? A1セルに下記の文字列があった場合、「1番目の半角スペースから2番目の半角スペースまでの文字列」を取り出したいのです。 5 53 00 8R この場合、53を取り出したいというわけです。 また、可能でしたら「最後の半角スペースから文字列の最後まで」を取り出す方法も教えていただけるとありがたいです。 この場合は8Rとなります。 InStr関数を使えばできるかもと思ったのですが、できそうなものが思い浮かびません。 どなたか教えていただけませんでしょうか。 よろしくお願いいたしますm(_ _)m

  • VBA 1セルからスペース区切り 文字列の切り取り

    Fa0/22_______________________disabled_____1____________auto___auto_10/100BaseTX Fa0/23_______________________notconnect___1____________full___100__10/100BaseTX Fa0/24_______________________connected____1__________a-full__a-100_10/100BaseTX 「_」アンダースコアは半角スペースに読み替えてください。 上記のような文字列を各セルに貼り付けています。上記の例では3行です。 この中の半角スペース以外の文字列を切り出して他のセルにコピーしたいのです。 Fa0/22 disabled 1 auto auto と結果的に5つに分解したいのです。 切り出す文字数は上記の通り様々でして、半角スペース数も常に固定という訳では ありません。 正規表現を使うのだと思いますが具体的にどう検索すればよいのか分かりません。 ご教示のほど、よろしくお願いします。

  • セルとセルの文字列を結合について

       A     B       C 1       2008/1/2   0:00:00 2       2008/1/2   0:15:00 3       2008/1/2   0:30:00 4       2008/1/2   0:45:00 5       2008/1/2   1:00:00 6       2008/1/2   1:15:00 ↓     A          B       C 1 2008/1/2 0:00   2008/1/2   0:00 2 2008/1/2 0:15   2008/1/2   0:15 3 2008/1/2 0:30   2008/1/2   0:30 4 2008/1/2 0:45   2008/1/2   0:45 5 2008/1/2 1:00   2008/1/2   1:00 6 2008/1/2 1:15   2008/1/2   1:15 といった感じにA列に Bの日付とCの時刻を半角スペースを挟んで 入力させたいのですが Excel上で以下の関数を使って手動でやると =CONCATENATE("2008/1/1"," ",0:15) 2008/1/1 0:00 と表示されるが マクロでの記述上では上手くいかない。 For i = 1 To 10 Range("A1,A10") = CONCATENATE(Cells(i, 2), Cells(i, 3)) Next ↑書き方としてはやっぱり間違ってる? 何かいい書き方ってないでしょうか・・? お手数おかけいたしますがよろしくお願いします。

  • EXCELで、文字列を任意の文字数毎に分割するには

    ≪やりたい内容と条件≫ ◆EXCELで、文字列を任意の文字数毎に分割したいです。 ◆文字列は、全角・半角・記号を含みます。 ◆1つのセルが半角80桁という制限があり、その上限を超えると、右の次のセルに流し込まれるようにしたいです。(A1は元の文字列1500桁くらい、以降B1,C1,D1,E1・・・という具合に流し込み) ≪試した内容≫ MIDB関数を見つけ挑戦しましたが、1つ目のセルはうまくいきますが、その後が出来ません。例えば、文字列が「・・・・・・abcあいうえお」となっていた場合、B1は「・・・・・・abcあいう」、C1は「 お」(「お」の前は、半角スペース)となります。 何かよい方法はないでしょうか。 一度に出来ないようであれば、A1-B1で残りの文字列が表示できれば、それ以降はまた関数を入れて一つ一つやっていきたいと思っています。 よろしくお願いいたします。

  • 画像のようなエクセルのA~D列に任意文字列が入っています。

    画像のようなエクセルのA~D列に任意文字列が入っています。 E1に 「A1(半角スペース)+B1~D1のいずれかのうちの1つ」 を出力させたいのですが、ブランクの欄もあるので =IF(C2="",B2,C2) など入力してみたのですが、うまくいきません。 最終的に 「A1(半角スペース)+B1~D1のいずれかのうちの1つ」 を表示させることはできないでしょうか? 詳しい方、アドバイスお願いいたします。

  • 日時のセルを他の文字列セルと結合させると・・

    A列とB列を結合したC列を作るとき、A列は単なる文字列なので問題ないですが、B列の日時が記入されたセルが元々シリアル値な為、C列のセルに=A2&B2と入れるとB2の部分が10月21日とかでなく38646になってしまいます。 これをB2セルに現れている通り10月21日で結合するにはどうすれば良いでしょうか?

専門家に質問してみよう