私はそれをよりよく並べ替えることができるように、私がExcelシートにコピーした情報を整理しようとしています。アウトラインのように1つのコラムで始まりますが、箇条書きはありません。メイン情報の横の列に副情報を入れたいと思っています。セル内容に基づくVBAアクション
マクロ目的:
から:
SUM関数SUM
の説明
機能
説明のIF IF関数
DATE関数
DATE関数の説明
DATE関数の第二の記述
DAYS関数
DAYS関数の説明
FIND、FINDB機能
説明FIのND、FINDB
INDEX関数
INDEX関数の説明
へ:
SUM関数。 。 。 。 。 。 。 。 SUMの説明
IF関数です。 。 。 。 。 。 。 。 。 。 。 IF関数の説明
DATE関数です。 。 。 。 。 。 。 。 DATE関数の説明
。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 DATE関数の第2の説明
DAYS機能。 。 。 。 。 。 。 。 DAYS関数の説明
FIND、FINDB関数。 FIND、FINDBの説明
INDEX関数です。 。 。 。 。 。 。 INDEX関数の説明は
私は動作するはず持っているものだと思うが、私は右のサブ情報をシフトしようとしたときにエラー91または1004のいずれかを取得しておきます。
問題コード:
' Shift sub-info right
Dim r As Integer
Dim find As String
find = "* function"
Range("A1").Select
For r = 1 To row1
If Range(ActiveCell).find(What:=find, Lookat:=xlWhole).Select Then
ActiveCell.Offset(1).Select
Else
ActiveCell.Insert (xlShiftToRight)
ActiveCell.Offset(1).Select
End If
Next r
私はちょうどので、私のコードは基本かもしれVBAを学ぶために始めていますが、私は私の問題は、「.find」ブール式と私ではないことであると考えていますブール値である同等の関数、またはそれを1に変換する方法を知らない。
「for、to、next」機能を使用する代わりに、すべてを一度に実行する方法があるかもしれませんが、開始方法はわかりません。
全コード:
Sub Shift_Over()
Dim row As Integer
row = 1
Dim n As Integer
'Locate last used cell
Range("A1:A8").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(8).Select
Range(ActiveCell, ActiveCell.Offset(7)).Select
row = row + 8
Loop
Rows(row).Select
Do While IsEmpty(ActiveCell)
Rows(row - 1).Select
row = row - 1
Loop
' Remove unneded rows
Dim row1 As Integer
row1 = 1
For n = 1 To row - 1
If Not IsEmpty(ActiveCell) Then
Rows(row - 1).Select
row = row - 1
row1 = row1 + 1
Else
Rows(row).Delete
Rows(row - 1).Select
row = row - 1
End If
Next n
' Check value of row1
Rows(row1).Select
' Shift sub-info right
Dim r As Integer
Dim find As String
find = "* function"
Range("A1").Select
For r = 1 To row1
If Range(ActiveCell).find(What:=find, Lookat:=xlWhole).Select Then
ActiveCell.Offset(1).Select
Else
ActiveCell.Insert (xlShiftToRight)
ActiveCell.Offset(1).Select
End If
Next r
'move sub-info in line with main-info
Range("B1").Delete (xlShiftUp)
Dim row2 As Integer
row2 = row1 + 5
Rows(row2).Select
Do While IsEmpty(ActiveCell)
Rows(row2 - 1).Select
row2 = row2 - 1
Loop
'remove unneeded rows
Dim d As Integer
Dim lines As Integer
lines = 1
For r = 1 To row2 - 1
If Not IsEmpty(ActiveCell) Then
Rows(row2 - 1).Select
row2 = row2 - 1
lines = lines + 1
Else
Rows(row2).Delete
Rows(row2 - 1).Select
row2 = row2 - 1
End If
Next r
End Sub
また、あなたは私のコードをより効率的にする方法についてのアイデアを持っている場合、私は(それを改善)、勉強として、またはそのごプログラミングに関するあらゆるニュアンスがある場合私が知らないの通知、私はそれを聞いてうれしいだろう。
私は自分のコードのすべてが私が思っていたことをしているわけではないことに気付きました。セレクション全体を見るのではなく、アクティブなセルだけを見ています。私は "IsEmpty(ActiveCell)"を "IsEmpty(Selection)"に置き換えようとしましたが、すべてにテキストが入っているかのように動作します。しかし、そのままでは、2つのサブ情報セットがある場合、2つ目のサブ情報は削除されます。 (例の4行目が削除されます)
'remove unneeded rows
Dim d As Integer
Dim lines As Integer
lines = 1
For r = 1 To row2 - 1
If Not IsEmpty(ActiveCell) Then
Rows(row2 - 1).Select
row2 = row2 - 1
lines = lines + 1
Else
Rows(row2).Delete
Rows(row2 - 1).Select
row2 = row2 - 1
End If
Next r
機能の説明と機能の区別は何ですか?たとえば、関数名にはfunctionという単語が含まれていますか? –
実際の記述が長すぎてすべてを入れることはできませんでしたが、その一例は "SUM function" - "この関数を使ってセルに値を追加する"です。彼らはすべて、すべての大文字と小文字の "ファンクション"の後に続く最初の単語を持っています。私は、 "xlParts"の代わりに "xlWhole"を使ってfind関数を制限しようとしました。 –
だから、関数名は常に少なくとも3つの大文字で始まりますか?データ全体に空白行が散在していますか? –