VBA

2016-04-04 26 views
-2

son aktif satırına kadar, biri bana bu konuda yardımcı olabilir.VBA

=IF(RC[-1]="""","""",RC[-1]-INT(RC[-1])) 

Yani bu denedim:

'Insert New Column 
    Columns("M:M").Select 
    Application.CutCopyMode = False 
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 

'Do until last line with data 
    Dim contl As Variant 
    contl = 1 

    Do While Cells(contl, 12) <> "" 
    contl = contl + 1 
Loop 

Range("M2:M" & contl).FormulaR1C1 = "=IF(RC[-1]="""","""",RC[-1] INT(RC[-1]))" 

Ama geçerli değildir

Ben verilerle son satırına kadar yeni bir sütun ve Astrum firması aşağıdaki kodu eklemek istediğiniz son aktif çizgiye kadar, sadece bir ilk .. Herhangi bir fikir neden? Teşekkürler!

+0

'Do' döngüsünde bir şey yok - amacın ne? Yapman gereken tek şey son satırını "Loop" un önüne koymak. (Düzenleme: Sadece yazıyı düzenlediniz, fakat ne düzenlediğinizi veya sorduğunuz şeyin ne olduğunu bilmiyorum.) – BruceWayne

+0

Evet, son çizgiyi Loop içine koymak mantıklı ... Ama bir sebepten dolayı çalıştı. bu taraftan. Doğru, düzenleme hakkında, çalışmaya başladıktan sonra kodu değiştirdikten sonra değiştirmedim, bu yüzden değiştirdiğim tek şey yorumlardı. –

cevap

1

Son yanıtla ilgili iki sorun var. Birincisi, bu döngüde,

Dim contl As Long 
contl = 1 
Do While Cells(contl, 12) <> "" 
    contl = contl + 1 
Loop 
Debug.Print contl 

Contl o döngü ayrılmadan önce boş bir hücreyi bulmak zorundadır çünkü istediğiniz birden sayısı ne kadar yüksekse olma ile sona erecek bu. Bu, bu değişiklikle giderilebilir.

Do While Cells(contl + 1, 12) <> "" 

İkinci sorun, yalnızca bir döngü kullanmaktır. Bu [Ctrl] + [↑ kolon L (örn L1048576) en altına gidip dokunarak aynıdır L.

contl = Range("L2:L" & Rows.Count).End(xlUp).Row 
Range("M2:M" & contl).FormulaR1C1 = _ 
    "=IF(RC[-1]=TEXT(,), TEXT(,), RC[-1] INT(RC[-1]))" 

alttan gelip sütundaki son nüfuslu hücreye bakabilirsiniz ]. Tüm formülleri bir kerede dolduruyorsunuz, bu da zamandan ve emekten tasarruf etmenizi sağlıyor, ancak son nüfuslu hücreyi bulmak için verilen döngü faydaları mahvediyor.

"""" yerine TEXT(,) kullandım. Aynı şey (ör. Boş bir dize) ve biraz daha az kafa karıştırıcı olabilirler.

+0

Bunlar gerçekten iyi gelişmeler, teşekkürler! Gönderdiğim yol çalışmaya başladı (gerçekten nedenini bilmiyorum ..), ama yazdığınız yol daha iyi, teşekkürler! –

0

Sorunu çözdüm, umarım birine yardımcı olabilir. Şerefe!

Sub Macro1() 
'Insert New Column 
    Columns("M:M").Select 
    Application.CutCopyMode = False 
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 

'Do until last line with data 
    Dim contl As Variant 
    contl = 1 

    Do While Cells(contl, 12) <> "" 'The number here is the number of the column (A=1, B=2...) 
    contl = contl + 1 
Loop 

Range("M2:M" & contl).FormulaR1C1 = "=IF(RC[-1]="""","""",RC[-1] INT(RC[-1]))" 'Change the range of the column if necessary 
+0

Bunu gerçekleştirmenin uygun yolu, düzeltilen kodu bir yanıt olarak göndermek ve soruyu değiştirmeden bırakmaktır. Bu şekilde gelecekteki insanlar problemi görebilir ve sonunda düzeltmeyi yapabilirler. – OpiesDad

+0

Teşekkür ederim, böyle nasıl yayınlanacağını gerçekten bilmiyordum. Jeep cevabı büyük bir gelişme sağladı, bu yüzden bunu sileceğim ve son cevap olarak işaretleyeceğim, işaret ettiğin için teşekkürler! –