2016-09-26 13 views
-2

私はかなり新しいvbです。できれば助けてください。私はN5からR24までの範囲のデータを持っていますが、すべてのセルに式が含まれていますが、空白以外のセルはほとんどありません。範囲内の空白でないセルをコピーして、1つの列に貼り付けます。

空白でないセルだけを列AKにコピーし、列に「/ CA」という文字列を追加したいと思います。列Nのセルがバルクの場合は、最初に列Bに「/ CA 」、以下のように:列AKで

  B   N  O  P  Q  R  S   T 
5     1PLA 2PMC         1PLA/CA 
6 123-01456789 1BULK          2PMC/CA 
7     1AKE        1BULK/123-01456789/CA 
8                1AKE 
9 
10 

順序は、それが範囲(:R24 N5)のすべての非空白のセルのデータが含まれているとして、それほど重要ではありません。

次のコードは、私が試したものですが、私は、ペーストした後、列Bに文字列やデータを追加する方法がわからない:あなたがしても、あなたの他の条件を実装することができます

Sub test() 
Dim ws As Worksheet 
Set ws = Sheets("Data") 
LastRow = ws.Cells(Rows.Count, "AK").End(xlUp).Row 
For Each cell In Range("N5:R24") 
If cell.Value <> "" Then 
cell.Copy 
Range("AK" & LastRow + 1).PasteSpecial xlPasteValues 
End If 
Next 
End Sub 
+0

実は、私はかなりのコードを記述する方法がわからない、私は列の最後の行を見つけるために、 'lastrow'を使用する方法を知っています私は 'specialcells'を使って定数と公式を見つけることができることを知っていますが、空白でないセルを見つける方法がわかりません –

+0

コードがある場合や試してみても表示してください。 (詳細は、[How to ask](http://stackoverflow.com/help/how-to-ask)を参照してください)。 – BruceWayne

+0

スタックオーバーフローは私のサイトのコードではありません、ごめんなさい。 –

答えて

0

次のコードは、あなたが何をしているかを考えています。 (カラムBが出力のみを追加しているかどうかはわかりませんでした。カラムNが "BULK"のローの値を処理していたのかどうかはわかりませんでした。また、かつてのを行うにはコメントアウトされたバージョンを含む。)

Dim cell As Range 
Dim lastRow As Long 
Dim newValue As String 
Dim ws As Worksheet 
Set ws = Sheets("Data") 

With ws 
    'Initialise lastRow to be the last used row in column T 
    lastRow = .Cells(.Rows.Count, "T").End(xlUp).Row 
    'Loop through every cell in the desired range 
    For Each cell In .Range("N5:R24") 
     'Start by setting the new value to be the old value 
     newValue = cell.Value 
     'Only process cells that aren't blank 
     If newValue <> "" Then 
      'Increment row counter for result 
      lastRow = lastRow + 1 
      'Check if column N contains "BULK" 
      If UCase(Mid(.Cells(cell.Row, "N").Value, 2, 4)) = "BULK" Then 
       'If it does, append the contents of column B 
       newValue = newValue & "/" & .Cells(cell.Row, "B").Value 
      End If 
      ''Alternate version if ONLY values in column N need to have column B appended 
      'If UCase(Mid(newValue, 2, 4)) = "BULK" And cell.Column = 14 Then 
      ' 'If it does, append the contents of column B 
      ' newValue = newValue & "/" & .Cells(cell.Row, "B").Value 
      'End If 

      'Append "/CA" 
      newValue = newValue & "/CA" 
      'Store result in column T 
      .Cells(lastRow, "T").Value = newValue 
     End If 
    Next 
End With 
+0

WOW!あなたの説明は非常に明確です!列Nを処理している間に追加された列Bのみが必要です。私が指示したとおりにコードを変更します。私は "Ucase"は大文字であることを理解しています。したがって、すべての値が大文字であれば、この関数は必要ありません。 –

+0

@TonyY - 正しい - "5Bulk"または "5BULK"が両方とも同じように扱われるように、UCaseを含めました。データが常に大文字で始まるとわかったら、それを取り除くことができます。また、 'Right(...、4)=" BULK "'を使ってコメントしてみましたが、 "BULK"が常に最後の4文字であることがわかっている場合は、私が使った「ミッド」。 – YowE3K

+0

残念ながら、私は 'newValue = cell.Value'を' newValue = Right(cell.Value、len(cell.Value) - 1) 'に変更しようとしました。その番号をTの隣の新しい列に貼り付けます)、失敗しました。私は何が欠けていますか? –

0
For Each cell In Range("N5:R24") 
If cell.Value <> "" Then 
cell.Copy 
Range("AK" & LastRow + 1).PasteSpecial xlPasteValues 
Range("AK" & LastRow + 1).value = Range("AK" & LastRow + 1).value & "/CA" 
LastRow = LastRow + 1 
End If 
Next 

if節。また、文字列を互いに結合するのに&を使用します。
また、ループごとにLastRowを増やす必要があります。そうでなければ、同じままになります。

+0

ありがとうございました!今私はそれがいつも同じままになる理由を理解する!私はあなたが言ったようにif節で他の条件を追加しようとしましたが、失敗しました。 Range( "AK"&LastRow + 1).PasteSpecial xlPasteValues 右(セル、4)= "バルク"の場合 範囲( "AK"&LastRow + 1)。値=範囲( "AK"&LastRow + 1値 "&CA" 範囲( "AK"&LastRow + 1)。値=範囲( "AK"&LastRow + 1)。値と範囲( "B"とセル(行数) .Value& "/ CA" End If'どこが間違っているか教えてくれますか? –

+0

私はあなたが他の答えで答えを見つけたと思います。 :)それは私が推測する "バルク"問題のためだった。 –

関連する問題