2016-04-08 5 views
0

yılında dizi sonucunu yazdırmak için.VBA işlevi bir <strong>işlevi sonucu/yazdırmak hücre aralığına içine bir dizi yazmalı</strong> yazmak istiyorum etkin hücredeki

etkin hücre birinci eleman olmalı ve aşağıda bir sonraki hücre ikinci (ve benzeri) olduğu. Yani, örneğin, şu anki aktif hücrem B2 ise, aşağıdaki görüntüde istenen sonuç benzer olmalıdır.

Kodum aşağıda sadece Debug.Pring çalışır ama sadece aslında excel sayfasında olmasını nasıl onu anlamaya olamaz.

Function ShowResult() 

Dim strArray() As String 
Dim result As String 
result = "Maybe I think too much but something's wrong" 
strArray = Split(result, " ") 

Dim StartRow, i As Integer 
StartRow = 1 

For i = 0 To UBound(strArray) 
    Debug.Print strArray(i) 
    'Range("A" & i + StartRow).Value = strArray(i) <--I tried even with this, didn't work! 
Next 
End Function 

enter image description here

+0

' Aralığı ("B" & i StartRow +) olabilir startRow nedir? 0 ise, geçersiz olan B0' hücresine başlıyorsunuz. – findwindow

+0

thanks @findwindow Sadece kodda düzelttim. ilkini görmezden gel. Bir sütun olduğunu söyle. teşekkürler – adhg

+0

Uh hücresi 'A0' hala geçersiz. XD Edit problemi olan satır: sadece döngüden önce 'StartRow = 1' ekleyin. Ancak, öncelikle dizinin elemanı böylece yerine 'strArray (i) özleyeceğim' do 'strArray (StartRow-1)'. Sonuç için – findwindow

cevap

3
Sub ShowResult() 

Dim strArray() As String 
Dim result As String 
result = Application.InputBox("enter string") 

strArray = Split(result, " ") 

For I = 0 To UBound(strArray) 
    Debug.Print strArray(I) 
    Cells(I + 1, 1).Value = strArray(I) 'this puts in in column A. change column here or even prompt user for it? 
Next 

End Sub 
+0

Bir işlevinden çağırır nasıl bir klavye kısayolu veya bir düğmeye uygulamak gerekir @adhg – adhg

+0

(siz ?! yapabilir). –

+0

oh ... Anladım! teşekkürler – adhg

7

enter image description here

biraz sizin Fonksiyonu değiştirin:

Function ShowResult() As Variant 

Dim strArray() As String 
Dim result As String 
result = "Maybe I think too much but something's wrong" 
strArray = Split(result, " ") 

For i = 0 To UBound(strArray) 
    Debug.Print strArray(i) 
    'Range("A" & i + StartRow).Value = strArray(i) <--I tried even with this, didn't work! 
Next 

ShowResult = Application.Transpose(strArray) 
End Function 

O zaman bütün dizeyi kapsayacak yeterli hücreleri seçmek gerekir kullanırken:

enter image description here

Sonra formülü yazın:

=ShowResults() 
o dizi formülünün yapmak için Ctrl-Shift-Enter

Hit: formül etrafında {} koyacağız düzgün excel yapılırsa

enter image description here

.

+0

+1. Mesafeyi bilmiyorsam (1 veya 1000 olabilir), sorumu basitleştirdim. – adhg

+0

bir 'yerine sub' kullanın bu XD bir fonksiyonu kullanmak için dolambaçlı oluyor @adhg. – findwindow

0

Ya da, `tek seferde dönüş dizisini doldurmak ve belki de ... Bir dizi formülü kullanılarak diyoruz ..

Option Explicit 

Function ShowResult() As Variant 

Dim strArray() As String 
Dim Result As String 
Dim i As Integer 

Result = "Maybe I think too much something's wrong" 
strArray = Split(Result, " ") 

ReDim vTemp(LBound(strArray) To UBound(strArray), LBound(strArray) To LBound(strArray)) As String 
For i = LBound(strArray) To UBound(strArray) 
    vTemp(i, LBound(strArray)) = strArray(i) 
Next 
ShowResult = vTemp 

End Function 
+0

btw OLMAYAN Lt, notu ikinci boyutu lbound iki kez kullanır :) – PaulG

+0

... oh ve ayrıca, bir kenara, aynı zamanda dizi boyutunu yeniden boyutlandırabilirsiniz formülü, döndürdüğünüz dizinin büyüklüğü olacak. Orada yapmanız gereken, 1 hücreye yeniden boyutlandırmak ve ardından 1. boyutu verilerin boyutuna yeniden boyutlandırmak ve aralıktaki .FormulaArray öğesini kullanmaktır. – PaulG

İlgili konular