痔になりやすい生活習慣とは?

エクセルでマクロを使って18行ごともしくは24行ごとに行を挿入し挿入したセルに「確定商品」の様にコメントを入れてそれをA1からA2、A3・・・と下に向かって行挿入を繰り返したいのですが、
マクロを使えば可能でしょうか?
※コメントは同じものを使います。

宜しくお願い致します。

A 回答 (2件)

こんにちは!



>18行ごともしくは24行ごとに行を挿入し・・・

行挿入・行削除等を行う場合、最終行から上に遡って操作するのが間違いが少ない方法です。
データ数がきっちり18や24で割り切れる数であればそのようなことが可能ですが、
そうでない場合はかなり厄介です。

仮にA列のデータ数が18できっちり割り切れる場合のコードは

Sub Sample1()
Dim i As Long
For i = Cells(Rows.Count, "A").End(xlUp).Row - 17 To 1 Step -18
Rows(i).Insert
Cells(i, "A") = "確定商品"
Next i
End Sub

としても大丈夫だと思います。

※ 個人的には別の方法で

Sub Sample2()
Dim i As Long, lastRow As Long, myRng As Range
Set myRng = Range("A1") '//←最初の行を格納しておく//
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row Step 18
Set myRng = Union(myRng, Cells(i, "A"))
Next i
myRng.EntireRow.Insert
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range(Cells(1, "A"), Cells(lastRow, "A")).SpecialCells(xlCellTypeBlanks).Value = "確定商品"
End Sub

のような感じでやる方が良いと思います。m(_ _)m
    • good
    • 0
この回答へのお礼

さっそく教えていただきありがとうございます。
2つ目に書いてくださったマクロで思うようにできました。完璧です!
もし24行ごとに区切る場合はStep 18を24にすれば大丈夫ですか?

お礼日時:2017/09/20 14:26

No.1です。



>もし24行ごとに区切る場合はStep 18を24にすれば大丈夫ですか?

前回のコードでお望みの動きになったのでれば
大丈夫のはずです。

お手元のデータで試してみてください。m(_ _)m
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QExcel2010で頭が0から始まる数字を表示形式以外で0表示させたい

A列の数字「1701」とB列の数字「001」を「concatenate」で繋ぐ際にB列の数字が3桁「001」なんですが、実際にセルに入っているのが「1」なので、繋いだ際に「17011」となってしまいます。
「001」をデータとするにはどうしたらよいのでしょうか?
宜しくお願いいたします。

Aベストアンサー

> 実際にセルに入っているのが「1」なので、
これを、「'001」と入力してみて下さい。
セル結合「&」で繋げることができます。
「'001」と入力されていても、数値計算時には、数字の「1」として認識されます。
お試しを。

QIF関数 複数条件の組み合わせ

いつもご教授いただきましてありがとうございます。

今回IF関数の複数条件についてご教授頂ければ幸いです。

サンプル画像添付しましたように
D列の作業列③に下記条件が一致したら数字を表示させる数式を組みたいです。
IF、OR関数の組み合わせだと思うのですが、複数条件の組み方が苦手なので
質問させていただきました。

①A列の数字の中でが2(B列商品コードの最初の数字)
  C列の数字の中で04、51、03(B列商品コードの下2桁)だったら1と表示させたい。
※ちなみにC列の条件数値は今後いくつか増える可能性があります。その場合もどういう式にしたらよいか併せてご教授願います。

②A列の数字の中でが2(B列商品コードの最初の数字)
  C列の数字の中で04、51、03(B列商品コードの下2桁)以外だったら2と表示させたい。

③A列の数字の中でが9(B列商品コードの最初の数字)だったら空白にしたい。

お手数をおかけいたしますが、何卒、ご教授願います。

Aベストアンサー

こんにちは!

せっかく作業用の列①・②を作っていらっしゃいますが、一気にC列に表示する数式にしてみました。

C2セルに
=IF(B2="","",IF(LEFT(B2,1)*1=2,IF(ISNUMBER(FIND(RIGHT(B2,2),"04,51,03")),1,2),""))

という数式を入れフィルハンドルで下へこれ以上データが増えることはない!という位まで
しっかりコピーではどうでしょうか?m(_ _)m

Qエクセルのマクロや関数について、ランダムに抽出する方法を探しています

エクセルのマクロや関数について、ランダムに抽出する方法を探しています。

例えばシート1のA列には
1:かっこいい
2:レザー
3:男性用
4:カラー豊富
5:手帳型
6:シンプル
7:~
と言ったよう文字列があり

同じシート1のB列には
1:かわいい
2:花柄
3:カラー豊富
4:レザー
5:手帳型
6:クロコダイル調
7:~

といったような文字が各セルに入力されているとします。
それぞれの列の1行目はテーマのようになっていて
これをシート2で 「かっこいい」を選択してマクロボタンを押したり関数などで
シート1の文字列からランダムで「かっこいい」の列のワードを3つとか4つピックアップして
シート2でかっこいいを選択した横のセルなどに表示させたいのです。

とても分かりにくくて申し訳無いのですが、
テーマに沿ったキーワードが大量にあり、
別シートにてテーマを選択するとそのテーマに沿ったキーワードが複数ピックアップされるような仕組みを模索しています。


もしお分かりになる方、なにかヒント的なものでも思いついた方がいればお教えいただければと思います。何卒よろしくお願いいたします。

エクセルのマクロや関数について、ランダムに抽出する方法を探しています。

例えばシート1のA列には
1:かっこいい
2:レザー
3:男性用
4:カラー豊富
5:手帳型
6:シンプル
7:~
と言ったよう文字列があり

同じシート1のB列には
1:かわいい
2:花柄
3:カラー豊富
4:レザー
5:手帳型
6:クロコダイル調
7:~

といったような文字が各セルに入力されているとします。
それぞれの列の1行目はテーマのようになっていて
これをシート2で 「かっこいい」を選択してマクロボタンを...続きを読む

Aベストアンサー

> 各列にどんどん無限に足されていくので
Excelの列数自体が有限ですから 無限に増えることはありません。
あまり条件を無駄に広げるのは良くないと思います。

Sub Macro1()
Dim xKey As String, i As Long, tf As Boolean
Dim xRng As Range, yRng As Range, y As Range
Dim lr As Long, lc As Long, ac As Long
Dim xStr As String
Const xCnt As Integer = 3 '抽出数

With ThisWorkbook.Worksheets("Sheet2")
xKey = .Range("A1").Value
Set yRng = .Range("B1").Resize(, xCnt)
End With

With ThisWorkbook.Worksheets("Sheet1")
lc = .Cells(1, .Columns.Count).End(xlToLeft).Column
tf = False
For i = 1 To lc
If .Cells(1, i).Value = xKey Then
tf = True
ac = i
Exit For
End If
Next i
If tf = False Then
MsgBox "該当するキーワードがありません。", vbCritical
Exit Sub
End If
lr = .Cells(.Rows.Count, ac).End(xlUp).Row
If lr - 1 <= xCnt Then
MsgBox "候補が規定数未満です", vbCritical
Exit Sub
End If
Set xRng = .Range(.Cells(2, ac), .Cells(lr, ac))
End With

For Each y In yRng
Do
y = xRng(WorksheetFunction.RandBetween(1, lr))
Loop Until WorksheetFunction.CountIf(yRng, y) = 1
Next y
Set xRng = Nothing: Set yRng = Nothing
End Sub

> 各列にどんどん無限に足されていくので
Excelの列数自体が有限ですから 無限に増えることはありません。
あまり条件を無駄に広げるのは良くないと思います。

Sub Macro1()
Dim xKey As String, i As Long, tf As Boolean
Dim xRng As Range, yRng As Range, y As Range
Dim lr As Long, lc As Long, ac As Long
Dim xStr As String
Const xCnt As Integer = 3 '抽出数

With ThisWorkbook.Worksheets("Sheet2")
xKey = .Range("A1").Value
Set yRng = .Range("B1").Resize(, xCnt)
End W...続きを読む

Qマクロを組んだエクセルのデータを別のエクセルにコピペしたことが原因で・・・

win7使用してます。以前に,アクティブセルの行と列に十文字のラインが入るようにネットで調べたマクロを入力してみました。そのせいなのだと思うのですが,そのデータを別のエクセルにコピペして使うのですが,そのコピペ先のエクセルシートのセルがランダムに青くなるようになりました。
範囲選択をしてその青い部分を覆うと,消えたり消えなかったりしたり,いったん画面外にスクロールし戻ると消えていたり・・そのままも。枠だけが水色(この色はコピペ元のシートで入力したマクロで指定した色)になったりもします。これも同様,消えたり現れたりを繰り返します。恐らくマクロを組んだシートのデータなので,何か余分なものまで持ってきてしまっているような状態なのだと思います。いろいろ調べていますが同じ症例が見当たらず,改善策を教えて頂きたく質問させて頂きました。
有識の方よろしくお願いします。

Aベストアンサー

No.1 の追補

標準モジュールではなくシートモジュールやワークブックモジュールにコードは残っていませんか?
下図の赤く囲まれた部分をクリックしてみてください。

Q【エクセル VBA】CSVファイルの結合

以前同じ質問をさせて頂いたのですが、説明不足であったため再投稿いたします。

【エクセル VBA】
VBAを使って複数のCSVを結合させたいのですが、コンマ区切りの値がデータ上に存在するため上手くまとまりません。

バッチ等でまとめる方法ではなく、どうしてもVBAでやらなければならないので、その方法をご教授下さい。

また、結合するCSVはエクセルを開いた時に選択できるようにしたいです。
(特定のファイル上を対象等では無く。)



現在使用しているVBAは以下のものになります。
-----------------------------------------------------

Sub CsvIn()
'CSVファイルの読み込み
Dim CsvFileName As Variant
Dim Li As String
Dim Bf() As String
Dim R As Long
Dim ShMain As Worksheet
Dim FlNo As Integer
Dim FFlNo As Integer

With ThisWorkbook 'シート&パスの設定
Set ShMain = .Worksheets("Sheet1")
ChDrive .Path
ChDir .Path
End With
'複数のファイルの選択を可に設定
CsvFileName = Application.GetOpenFilename _
(filefilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイル選択", MultiSelect:=True)
If VarType(CsvFileName) = vbBoolean Then Exit Sub 'キャンセル時の処置
R = 1 '行の初期値
For FlNo = 1 To UBound(CsvFileName) 'ファイル数分ループ
FFlNo = FreeFile '---使用可能なファイル番号取得
Open CsvFileName(FlNo) For Input As #FFlNo
Do Until EOF(FFlNo) '最終行までループ
Line Input #FFlNo, Li '一行読み込み
Bf = Split(Li, ",") 'カンマで分割し配列に代入
If UBound(Bf) >= 0 Then '空白行の処理を飛ばす
With ShMain '1行分のデータをセルに出力
.Range(.Cells(R, 1), Cells(R, UBound(Bf) + 1)).Value = Bf
End With
End If
R = R + 1
Loop
Close #FFlNo
Next FlNo
End Sub

-----------------------------------------------

参考になりそうなサイト
http://excel-ubara.com/excelvba5/EXCELVBA257.html



よろしくお願いします。

以前同じ質問をさせて頂いたのですが、説明不足であったため再投稿いたします。

【エクセル VBA】
VBAを使って複数のCSVを結合させたいのですが、コンマ区切りの値がデータ上に存在するため上手くまとまりません。

バッチ等でまとめる方法ではなく、どうしてもVBAでやらなければならないので、その方法をご教授下さい。

また、結合するCSVはエクセルを開いた時に選択できるようにしたいです。
(特定のファイル上を対象等では無く。)



現在使用しているVBAは以下のものになります。
------------...続きを読む

Aベストアンサー

No.13 に対する補足コメントについて

ですから!
そのダメな所のデータを数行抜き出したものでCSVファイルを作成して実験してみてください。
それでも症状が出るならばその数行のデータを提示してください。

大変申し訳ないのですが、こちらはそちらの状況が見えないので「特段ルールが異なるようなことはございませんでした。」は、あなたが気づかないだけの場合が多いのでそれを提示していただきたいのです。
「同じ列に似た値があると上書かれてしまうということはありませんでしょうか?」については1文字ずつ「"」「,」が有った時だけ特別な作業をしているだけなので考えにくいです。

もしかしての考えられそうなものとして
・文字コードのせいで1つの2バイト文字が「"」や「,」と何かに分解されてしまっている可能性も有るかもしれません。
・1つの行中で「"」が偶数個でないと誤動作する可能性はあります。
・CSVファイルに特殊な制御コードになりそうな文字が含まれている。
・これは故意にしているのですが空白だけの行は削除していますが問題ないですよね?

とにかく、こちらではそちらの状況が見えないので、ダメな状況を具体的に提示していただけないと実験などが出来ないのです。もしも具体的な提示が出来ないのならばそう言ってください。あなたの事は無視するようにします。
よろしくお願いいたします。

No.13 に対する補足コメントについて

ですから!
そのダメな所のデータを数行抜き出したものでCSVファイルを作成して実験してみてください。
それでも症状が出るならばその数行のデータを提示してください。

大変申し訳ないのですが、こちらはそちらの状況が見えないので「特段ルールが異なるようなことはございませんでした。」は、あなたが気づかないだけの場合が多いのでそれを提示していただきたいのです。
「同じ列に似た値があると上書かれてしまうということはありませんでしょうか?」については1文...続きを読む

Q空白セルを赤"●"に変更するVBAを教えて下さい

特定範囲の空白セルを赤"●"に変更するVBAです。
「B6:E8」のセル全てに空白が無いとき、エラーとなり EXIT SUB で終了し
「G6:J8」の処理が出来ません。
「B6:E8」全てに空白が無いときも「G6:J8」の処理を続ける方法を教えて下さい。

Sub Mark()
'セルB6からE8にある空白セルに赤の赤の●を入れる
Dim Rng As Variant
On Error Resume Next
Set Rng = Range("B6:E8").SpecialCells(xlCellTypeBlanks)
If Not IsObject(Rng) Then Exit Sub
On Error GoTo 0
With Rng
.Value = "●"
.Font.ColorIndex = 3
End With

'セルG6からJ8にある空白セルに赤の赤の●を入れる
On Error Resume Next
Set Rng = Range("G6:J8").SpecialCells(xlCellTypeBlanks)
If Not IsObject(Rng) Then Exit Sub
On Error GoTo 0
With Rng
.Value = "●"
.Font.ColorIndex = 3
End With

End Sub

特定範囲の空白セルを赤"●"に変更するVBAです。
「B6:E8」のセル全てに空白が無いとき、エラーとなり EXIT SUB で終了し
「G6:J8」の処理が出来ません。
「B6:E8」全てに空白が無いときも「G6:J8」の処理を続ける方法を教えて下さい。

Sub Mark()
'セルB6からE8にある空白セルに赤の赤の●を入れる
Dim Rng As Variant
On Error Resume Next
Set Rng = Range("B6:E8").SpecialCells(xlCellTypeBlanks)
If Not IsObject(Rng) Then Exit Sub
On Error GoTo 0
With Rng
.Value = "●...続きを読む

Aベストアンサー

そりゃそーだよ。
最初の"B6:E8" の判定で
(If Not IsObject(Rng) Then Exit Subだから、
SUBから抜けなさい、とやってるでしょう?

(If Not IsObject(Rng) Then goto next
に修正して

「'セルG6からJ8にある空白セルに赤の赤の●を入れる」の上に
ラベルを追加する。

next:
'セルG6からJ8にある空白セルに赤の赤の●を入れる

QExcel VBA 並び替えについて お手数をおかけします 下記条件のようなプログラムを作りたいので

Excel VBA 並び替えについて
お手数をおかけします
下記条件のようなプログラムを作りたいのですがご教授をお願いいたします

sheet1
A1 みかん
A2 りんご
B1 ブドウ
C1 メロン
D1 柿
D2 イチゴ
と記載されているのを
sheet2のB2から縦に並び替えたい
B2 みかん
B3 りんご
B4 ブドウ
B5 メロン
B6 柿
B7イチゴ

ご教授をお願いいたします

Aベストアンサー

No.3 追補

もちろん、以下でもいいです。

Sub 並び替え()
Dim 元行 As Long
Dim 元列 As Long
Dim 先行 As Long
先行 = 2
Sheets("Sheet1").Select
For 元列 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
For 元行 = 1 To Cells(Rows.Count, 元列).End(xlUp).Row
Sheets("Sheet2").Cells(先行, 2).Value = Cells(元行, 元列).Value
先行 = 先行 + 1
Next
Next
Sheets("Sheet2").Select
End Sub

QVBAのコマンドボタンと入力について

VBA初心者でよくわからないので教えて下さい。
やりたいことは、エクセルシートのA列とかに数個のデータを入力し、コマンドボタンを
押すと入力したデータを取り込んで、処理した値を表示させたいのですが、
UserFormでコマンドボタンを作成し、実行すると、エクセルシートのセルに
入力できなくなってしまいます。
 コマンドボタンを設定しても、通常通り、エクセルシートに入力および編集等ができるように
する方法を教えて下さい。
 また、できないようであれば、コマンドボタン設定以外でなにか方法があれば、
アドバイスお願いします。

Aベストアンサー

>UserFormでコマンドボタンを作成し、実行すると、エクセルシートのセルに入力できなくなってしまいます。

こう言った趣旨のことでしょうか?
UserForm1.Show vbModeless
とすれば、「UserForm1」を表示した状態でもシートの編集は可能になります。
参考
http://www.shoeisha.com/book/hp/pc/office/Excel/files/text2.html


>コマンドボタンを押すと入力したデータを取り込んで、
どこに(どこの値を)取り込みたいのでしょうか?
例えば、UserFormに設定された変数に、sheet1のA1入力(代入)したいのであれば、
UserForm1.変数名=sheets(1).Range("A1")

UserForm1.変数名=sheets(1).cells(1,1)
といったことで可能です。

>処理した値を表示させたいのですが、
こちらは、前述とは逆に
sheets(1).Range("A1")=「処理した値」
とすれば表示(代入)できるはずです。

Qエクセルで 異なるデータを含む2つのデータを 1つの表にまとめる方法を教えてください

初めて質問をします。
あまりエクセルが詳しくなく わからないので 教えて下さい。

2つのデータがあります。
Aには仕入れ数、Bには売り上げ数があります。
双方の商品名はすべて一致するわけではなく、「AにあってBにない」「BにあってAがない」ものもあります。


    データA 【仕入れ】     データB 【売上】

管理No 商品  仕入れ数   管理No 商品   売上数
   1  りんご  3        2  みかん  8
   2  みかん  8       3    バナナ    3
   3  バナナ    4      1  りんご    2
   4  いちご    1      7   もも     3
   5  オレンジ  3      10    キウイ     2
   6  レモン    3     11    ぶどう     2
   7  もも     3     13    大根      1
   8  なし     2
   9  カキ    5
  10  キウイ  2
  11  ぶどう    1
  12   マンゴー   1


上記の2つのデータを以下のようにまとめたいのですが 可能でしょうか?
(ABすべての商品名を出して それぞれの数を表示する)

管理No   商品    仕入れ数      売上数
   1   りんご      3        2
   2   みかん      8      8
    3   ばなな      4        3
   4   いちご      1        0
   5    オレンジ  3        0
   6   レモン      3     0
   7   もも       3     3
   8   なし       2     0
   9   カキ      5     0
   10   キウイ      2      2
   11   ぶどう      1       2
   12   マンゴー    1      0
   13   大根      0      1
      


数字がずれていてすみません。
どうぞよろしくお願いします。

初めて質問をします。
あまりエクセルが詳しくなく わからないので 教えて下さい。

2つのデータがあります。
Aには仕入れ数、Bには売り上げ数があります。
双方の商品名はすべて一致するわけではなく、「AにあってBにない」「BにあってAがない」ものもあります。


    データA 【仕入れ】     データB 【売上】

管理No 商品  仕入れ数   管理No 商品   売上数
   1  りんご  3        2  みかん  8
   2  みかん  8       ...続きを読む

Aベストアンサー

こんにちは!

>(ABすべての商品名を出して それぞれの数を表示する)
というコトですので、手っ取り早くVBAでの一例です。

↓の画像のようにそれぞれのシート名は「仕入れ」・「売上」となっていて、Sheet3に表示するとします。
尚、「商品」の「管理No」はシリアルナンバーのように決まっているものとします。
そして、Sheet3の1行目項目行は入力済みという前提です。

Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() '//この行から//
Dim i As Long, lastRow1 As Long, lastRow2 As Long, lastRow3 As Long
Dim c As Range, r As Range
Dim wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("仕入れ")
Set wS2 = Worksheets("売上")
Application.ScreenUpdating = False
With Worksheets("Sheet3") '//←「Sheet3」はまとめるシート名に!"//
lastRow3 = .Cells(Rows.Count, "A").End(xlUp).Row
If lastRow3 > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow3, "D")).ClearContents
End If
.Range("E:F").Insert
lastRow1 = wS1.Cells(Rows.Count, "A").End(xlUp).Row
Range(wS1.Cells(1, "A"), wS1.Cells(lastRow1, "A")).Copy .Range("E1")
lastRow2 = wS2.Cells(Rows.Count, "A").End(xlUp).Row
Range(wS2.Cells(2, "A"), wS2.Cells(lastRow2, "A")).Copy .Cells(Rows.Count, "E").End(xlUp).Offset(1)
.Range("E:E").AdvancedFilter Action:=xlFilterCopy, copytorange:=.Range("F1"), unique:=True
.Range("F:F").Sort key1:=.Range("F1"), order1:=xlAscending, Header:=xlYes
lastRow3 = .Cells(Rows.Count, "F").End(xlUp).Row
Range(.Cells(2, "F"), .Cells(lastRow3, "F")).Copy .Range("A2")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
Set c = wS1.Range("A:A").Find(what:=.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
.Cells(i, "B") = c.Offset(, 1)
.Cells(i, "C") = c.Offset(, 2)
End If
Set r = wS2.Range("A:A").Find(what:=.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If Not r Is Nothing Then
If .Cells(i, "B") = "" Then
.Cells(i, "B") = r.Offset(, 1)
End If
.Cells(i, "D") = r.Offset(, 2)
End If
Next i
.Range("E:F").Delete
.Columns.AutoFit
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub '//この行まで//

※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。

※ コード内の「Sheet3」の部分は実際のシート名に変更してください。m(_ _)m

こんにちは!

>(ABすべての商品名を出して それぞれの数を表示する)
というコトですので、手っ取り早くVBAでの一例です。

↓の画像のようにそれぞれのシート名は「仕入れ」・「売上」となっていて、Sheet3に表示するとします。
尚、「商品」の「管理No」はシリアルナンバーのように決まっているものとします。
そして、Sheet3の1行目項目行は入力済みという前提です。

Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → ...続きを読む

Qエクセル VBAで文章にある複数の同じ文字列をそれぞれ取得したい

下記のような記述だと1つ目の「天気」の文字列は取得できても
2つ目の「晴れ」の文字列を取得することができません。
どうすれば2つ目の文字列を取得することができるのでしょうか?
※「<」と「>」で挟まれている間の文字列を取得したいです。
※「<」と「>」が何組あるかは不明です。

Dim str0, str1, str2 As Variant
Dim 指定1, 指定2 As Variant

str0 = ”今日の<天気>は<晴れ>です。
指定1 = ”<”
指定2 = ”>”
str1 = Mid(str0, Len(指定1) + InStr(1, str0, 指定1)
str2 = Left(str1, InStr(1, str1, 指定2) - 1)


使用OS:Windows 8
使用ソフト:Microsoft Excel 2007

ご存知の方がおられましたらご回答をよろしくお願いいたします。

Aベストアンサー

> ※「<」と「>」が何組あるかは不明です。

っていうなら、str1、str2・・・・ じゃダメですよね。
際限なく str3・・・・str100 とか宣言するわけにもいかないし。

Dim str0 As Variant
Dim str1() As Variant
Dim stIdx As Integer
Dim 指定1 As Variant
Dim 指定2 As Variant
Dim ptA As Integer
Dim ptZ As Integer

指定1 = "<"
指定2 = ">"

str0 = "今日の<天気>は<晴れ>です。<雨>や<曇り>だったり<大荒れの嵐>もあるかも。"

ReDim str1(Int(Len(str0) / 2)) As Variant

ptZ = 1
stIdx = 0

Do Until InStr(ptZ, str0, 指定1) = 0
stIdx = stIdx + 1
ptA = InStr(ptZ, str0, 指定1)
ptZ = InStr(ptZ + 1, str0, 指定2)
str1(stIdx) = Mid(str0, ptA + 1, ptZ - ptA - 1)
MsgBox (str1(stIdx))
Loop

解読はご自身でトライしてみてください。

> ※「<」と「>」が何組あるかは不明です。

っていうなら、str1、str2・・・・ じゃダメですよね。
際限なく str3・・・・str100 とか宣言するわけにもいかないし。

Dim str0 As Variant
Dim str1() As Variant
Dim stIdx As Integer
Dim 指定1 As Variant
Dim 指定2 As Variant
Dim ptA As Integer
Dim ptZ As Integer

指定1 = "<"
指定2 = ">"

str0 = "今日の<天気>は<晴れ>です。<雨>や<曇り>だったり<大荒れの嵐>もあるかも。"

ReDim str1(Int(Len(str0) / 2)) As Variant

ptZ = 1
...続きを読む


人気Q&Aランキング