• ベストアンサー

特定の文字列で列を区切るには?

nicotinismの回答

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.5

クエリで出来るのかな?出来たとしても難解なものになるのでは? あの御方なら可能かもしれません・・ 直感的に分かりやすいレコードセットを操作する方に決定 説明は最後に '------------------------------------------------------ Const tblName = "T1" '操作したいテーブル名の定数 Function getColCount() As Long '最大の分割数取得 Dim db As DAO.Database Dim rs As DAO.Recordset Dim t As Long   Set db = CurrentDb   Set rs = db.OpenRecordset(tblName, dbOpenSnapshot)   If rs.EOF = False Then     t = UBound(Split(rs!F1, "-"))     Do Until rs.EOF       If getColCount < t Then         getColCount = t       End If       rs.MoveNext     Loop   End If   getColCount = getColCount + 1   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Function Sub makeTable()  'テーブル操作 Dim db As DAO.Database Dim rsFrom As DAO.Recordset, rsTo As DAO.Recordset Dim tdf As DAO.TableDef Dim strSql As String Dim i As Integer Dim tVar As Variant   Set db = Application.CurrentDb '既存テーブルにフィールド追加   i = getColCount + 1   strSql = "alter table " & tblName & " add column F"   For i = 1 To i     db.Execute strSql & CStr(i + 1) & " text(20) ", dbFailOnError   Next i   db.TableDefs.Refresh '各フィールドにF1フィールドの分割した値を格納   Set rsFrom = db.OpenRecordset(tblName, dbOpenSnapshot)   Set rsTo = db.OpenRecordset(tblName, dbOpenDynaset)   Do Until rsFrom.EOF     tVar = Split(rsFrom!F1, "-")     rsTo.Edit     For i = 0 To UBound(tVar)       rsTo.Fields("F" & CStr(i + 2)) = tVar(i)     Next i     rsTo.Update     rsFrom.MoveNext: rsTo.MoveNext   Loop   rsFrom.Close: Set rsFrom = Nothing   rsTo.Close: Set rsTo = Nothing   db.Close: Set db = Nothing End Sub '------------------------------------------------------ データが入っているテーブルの複製をコピペして、テーブル名を、T1 に データがあるフィールド名を、F1 に変更 DAOに参照設定がされていなければ・・ Alt + F11 を押してVBEの画面にして メニュー→ツールから参照設定を選択 参照可能なライブラリから、Microsoft DAO 3.6 Object Library を探して チェックボックスにチェックを入れます メニュー→挿入から標準モジュールを選択 新たな窓が出てくるので、上記の点線で囲んだ部分をコピペ Ctrl + G を押してイミディエイトウィンドウを出して そこに maketable と入力し Enter Alt + F11 で Access の 窓に切り替え 先ほどの T1 テーブルを開いてみてください。 なお、DAOのメンバを使うように変数宣言してますので、ADO との共存可能也 また、T1 テーブルにはフィールドは一つしかないものと仮定 文字数ぎり

関連するQ&A

  • (Excel2002)特定の文字列が含まれる列に対して値を返したい

    (わかりにくいタイトルですいません) こんにちは。熟練の皆様にお伺いします。 次のような場合の計算式が思いつきません…ぜひお力をお貸し下さい! ある文字列(A行)の中から特定の文字列(D行のいずれか)を探し、 それが含まれた場合、B行にE行の値を返す、というものです。 以下のような場合、    A        B     C     D     E 1  いろはにほ              はにほ  ◇ 2  いろは                 るを    ◆ 3  ちりぬるを  4  ちり     5  はにほちり  6  わかよ     ↓こういう結果にしたいんです    A        B     C     D     E 1  いろはにほ  ◇           はにほ  ◇ 2  いろは                 るを    ◆ 3  ちりぬるを   ◆ 4  ちり     5  はにほちり   ◇ 6  わかよ    いかがなものでしょうか…

  • 文字を置き換える

    よろしくお願いいたします。 列の一部にAまたは、ABまたは、どちらも含まない複数の文字があります。 アクセスのクエリーで、Aを含む場合は、C   ABを含む場合は、D   どちらも含まない場合は、Eとしたいのですが、どうしたらいいでしょうか。 教えてください。お願いいたします。

  • accessで複数カラムの組み合わせ文字列をselect

    エクセルVBAからaccessにクエリを送る際のselectクエリの書き方について教えてください。 VBAから指定する文字列strが、accessのカラムa,b,cのハイフン区切りの文字列と一致した場合のみselectしたいのですが、select文はどのように書けばよいでしょうか? (VBAでstrをハイフンなしにばらさない場合) ------------------- str='0-1-2' ↓ select * from aaa where カラムa=0 and カラムb=1 and カラムc=2 ↓ 「and」なしで書く場合は? -------------------

  • <文字列マクロについて>

    <文字列マクロについて> 皆さま お力を貸して下さい。 初心者で、何もわからず書いておりますがすみません。 下記の2つのマクロを教えて下さい。 ?横に並んだ「ある行」に在るデータを「列」に変換し、  指定した数だけ並べる    あいうえお    ←A1セルからE1まで5列(これは状況により変わる)       ↓(マクロ実行:3行同じ数だけ並べるという指定)  あ        →A1セルから下にひたすら、同じ文字が続き順に並ぶ  あ  あ  い  い  い  う  う        →A1セルから下に並べる(3行は指定できれば別の数字にも変えたい  う  え  え  え  お  お  お ?規則的に並んだデータのまとまりをセットで移動する。  例だと5つの塊(これは変数とおきたい)    あ A              a  い B              b  う C               c   え D               d  お E              e    ↓(マクロ実行)  あ  い  う  え  お  A  B  C  D  E      ・  ・  ・  ・    a b c d e    

  • Excelでの文字列編集(再質問です)

    Excel2003での再質問です。 今、A列~E列に以下の文字が入っています。 A  B  C  D  E 1あ い う え お  2あ   う 上記の内容を「・」で区切りを入れて、F列に結合させたいのですが  F 1あ・い・う・え・お 2あ・う この質問に対しては、以下のご回答をいただき、解決することが出来ました。 =SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1&B1&C1&D1&E1,A1,A1&" "),B1,B1&" "),C1,C1&" "),D1,D1&" "))," ","・") このたび、3列増やし、A~Hまでの計算式を以下で行ったところ、 =SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1&B1&C1&D1&E1&F1&G1&H1,A1,A1&" "),B1,B1&" "),C1,C1&" "),D1,D1&" "),E1,E1&" "),F1,F1&" "),G1,G1&" "))," ","・") 計算式がエラーとなります。ご教示いただけますでしょうか? よろしくお願いします。

  • リダイレクトできません。クエリー文字列を含めたURLはリダイレクトしない?

    .htaccessで http://example.com/index.php?%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BBwiki ↓ http://example.com/ にリダイレクトさせようと思っています。 以下をを実行してもうまくいきません。 Redirect permanent /index.php?%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BBwiki http://example.com/ 以下の様にするといくのですが Redirect permanent /index.php http://example.com/test.php 上と下の違いはクエリー文字列が含まれていることだとおもいます。 クエリー文字列を含めるとリダイレクトは働かないのでしょうか? 文字列をなんらか形でエスケープする必要があるのでしょうか? javascriptだといくのですが、.htaccessだといきません。 教えてください。宜しくお願いします。

  • Perl テキスト内の文字列 合計値

    ご教示お願い致します。 test.txt --------------- a,a,a c,b,b b,c,b a,a,d a,e,e --------------- ↑のようなテキストがあり それを 1列目[0] a = 3 b = 1 c = 1 d = 0 e = 0 2列目[1] a = 2 b = 1 c = 1 d = 0 e = 1 3列目[2] a = 1 b = 2 c = 0 d = 1 e = 1 このように求めたいのと、 全ての配列から a = 6 b = 4 c = 2 d = 1 e = 2 という風に求めたいのですが、どのようにするのでしょうか?

  • 条件を満たす行の、特定の列における最小値

    以下のようなスプレッドシート(Excel)があります。    [A列] [B列] [C列] [D列] [E列] [1行]資材コード メーカー 単価 平均 最安 [2行]T1111 A 311 [3行]T1211 A 411 [4行]T1311 A 311 [5行]T1111 B 299 [6行]T1211 B 500 [7行]T1311 B 312 [8行]T1111 C 300 [9行]T1211 C 280 [10行]T1311 C 400 D列(D2~D10)には、 同じ資材コードの単価の平均が入ります。 これは、 SUMIF(A$2:A$10,A*,C$2:C$10)/COUNTIF(A$2:A$10,A*) (*には当該行番号が入る。) で、表現できました。 次にE列(E2~E10)には 同じ資材コードのもののうち、 最安となる単価を表示させたいのですが、 どう関数を組み合わせるのが、スマートなのかわかりません。 たとえば、E2セル、E7セル、E11セルは 資材コードT1111になっている行のうち、 単価(C列)が最低となる時の値を表示するようにしたいので、 C2セル=311、C7セル=312、C8セル=800のうち、最低である311が E2セル=311、E7セル=311、E8セル=311 にそれぞれ表示されるようにしたいのです。 わかりにくい説明で申し訳ありませんが、 疑義があれば、適宜補足しますので、指摘してください。 よろしくお願いいたします。

  • エクセルで検索値があった時に特定の文字列をかえす

    こんにちは。 Excelについて教えてください。 Excelのシートが2枚あり、1枚目には以下のようなデータがあります。 -------------------- A列    B列 -------------------- 1000 2000 3000 4000 4000 1000 -------------------- 2枚目のシートには各列に以下のようなデータがあります。 -------------------- A列    B列 -------------------- 1000    棚田さん 2000    池内さん 3000    山本さん 4000    佐藤さん -------------------- 1枚目の値が2枚目のシートの値に該当するものがあった場合、2枚目シートのB列の値を1枚目のシートに下のように返したいです。どのような関数を使ったらいいでしょうか? -------------------- A列    B列 -------------------- 1000   棚田さん 2000   池内さん 3000   山本さん 4000   佐藤さん 4000   佐藤さん 1000   棚田さん --------------------

  • Excelでの文字列編集について

    Excel2003での質問です。 今、A列~E列に以下の文字が入っています。 A  B  C  D  E 1あ い う え お  2あ   う 上記の内容を「・」で区切りを入れて、F列に結合させたいのですが  F 1あ・い・う・え・お 2あ・う どのようにすればよろしいでしょうか? よろしくお願いします。 尚、現時点で、F1に=CONCATENATE(A1,B1,C1,D1,E1)を設定し、  F 1あいうえお となっています。